Mam zadanie, które generuje źródła java i zestaw słoików z tych źródeł (na przykład projekt a
). Chciałbym wyeksportować te słoiki do zależnych projektów (np. Projekt b
). Tak oto z grubsza to, co mam teraz:Gradle - czy mogę dołączyć dane wyjściowe zadania do zależności projektu
//a.gradle
configurations{
generatedJars
}
task generateJars(type: JavaExec) {
//generate jars ...
outputs.files += //append generated jars here
}
dependencies{
generatedJars generateJars.outputs.files
}
//b.gradle
dependencies{
project(path: ':a', configuration: 'generatedJars')
}
Działa OK, z wyjątkiem, że dodanie generateJars.outputs.files
jako zależność nie Gradle powiedzieć, że ma uruchomić generateJars
zadanie, gdy nie ma jeszcze słoików generowane. Próbowałem dodać samo zadanie jako zależność, mając nadzieję, że będzie działało w taki sam sposób jak podczas dodawania zadania jar/zip do konfiguracji artefaktów (np. artifacts{ myJarTask }
), ale generuje błąd informujący mnie, że nie mogę tego zrobić że. Oczywiście mogę wstrzyknąć zadanie generateJars
gdzieś w procesie kompilacji, zanim :b
zacznie oceniać, ale to jest niezgrabne i kruche, więc chciałbym tego uniknąć.
Czuję, że powinienem dodawać wygenerowane słoiki do artifacts{ ... }
projektu, ale nie jestem pewien, jak zrobić je wtedy widoczne dla zależnych projektów. Czy istnieje lepszy sposób osiągnięcia tego?
Projekty zależne (projekt b
) będą musiały wykonać konfigurację ścieżki klasy modułu IntelliJ IDEA, aby wskazywały na wygenerowane słoje projektu a
. Coś raczej tak (pseudo-kod):
//b.gradle
idea{
module{
scopes.COMPILE.plus += project(path: ':a', configuration: 'generatedJars').files
}
}
Do tej pory próbowałem po prostu dodanie dependecy projektu na :a
„s generatedJars
w :b
, ale plugin Idea prostu dodaje moduł :a
jako moduł-uzależnienia i zakłada, że eksportuje wygenerowane słoiki (co jest prawdopodobnie poprawnym założeniem), dlatego nie dodaje wygenerowanych słoików do ścieżki klasy :b
.
Każda pomoc będzie bardzo ceniona!
Dzięki. Dodanie zadania do 'artefaktów 'ładnie się wyświetla w module, ale nie widzę, jak mogę odwołać się do tych słoików z projektu' b' (bez ich publikowania). Tak, możliwe jest generowanie tylko źródeł i eksportowanie ich jako źródła modułu. To powinno zadziałać, ale tworzy dodatkową pracę dla IDEA, więc miałem nadzieję, że uda się ją jakoś obejść. Aby sprawić, żeby zaimek "ideaModule -> generateJars" działał dobrze, muszę dodać także "b: ideaModule -> a: ideaModule", a mam około 3 modułów, które wszystkie muszą to zrobić. Miałem nadzieję, że uda mi się jakoś go ustawić do automatycznego rozwiązania. – rodion
ad 1. 'projekt (ścieżka:" a ", konfiguracja:" wygenerowane Jars ")' –
ad 2. Czy "dodatkowa praca" ma znaczenie? (Możesz użyć tego samego argumentu dla nieprodukowanego kodu.) W każdym razie powinieneś prawdopodobnie skompilować pliki za pomocą Gradle zamiast zadania JavaExec. –