2017-06-27 10 views
7

Mam projekt gradle z 8 projektami potomnymi i skonfigurowane zadanie shadowjar, aby utworzyć "wszystkie" słoiki. Projekt toplevel jest ustawiony tak, aby mieć zależności do wszystkich swoich dzieci, to mówi shadowjar co obejmuje:Jak zrobić gradle zadanie ShadowJar również tworzyć źródła i javadoc jego dzieci?

project(':') { 
    dependencies { 
     compile project(':jfxtras-agenda') 
     compile project(':jfxtras-common') 
     compile project(':jfxtras-controls') 
     compile project(':jfxtras-icalendarfx') 
     compile project(':jfxtras-icalendaragenda') 
     compile project(':jfxtras-menu') 
     compile project(':jfxtras-gauge-linear') 
     compile project(':jfxtras-font-roboto') 
    } 
} 

shadowJar { 
    classifier = null // do not append "-all", so the generated shadow jar replaces the existing jfxtras-all.jar (instead of generating jfxtras-all-all.jar) 
} 

Działa to dobrze, ale Maven centralny odmawia cały słoik, ponieważ nie ma skojarzonego źródła i Javadocs słoik.

Jak powiedzieć gradle, aby również generować źródła i javadoc? Dokumentacja ShadowJar mówi, że powinna to zrobić domyślnie.

+0

Czy znalazłeś odpowiedź na pytanie, jak wygenerować i przesłać javadoc jar z shadowJar do maven central? Też chciałbym wiedzieć! – Jorn

+2

Nie. To wciąż coś. Poważnie rozważa przejście z powrotem na Mavena, zwłaszcza, że ​​integracja Java 9 i Eclipse wciąż jest tak niepokojąca. – tbeernot

+1

Uwzględniasz tylko lokalne zależności projektu w słoiku utworzonym przez wtyczkę 'ShadowJar', a nie zewnętrzne zależności? Jeśli tak jest, wątpię, żebyś w ogóle potrzebował "ShadowJar". Prawdopodobnie możesz utworzyć proste zadania w słoiku, które wykonają zadania kompilacji, źródła i javaDoc podprojektu i samodzielnie utworzą słoik. – dpr

Odpowiedz

4

Wtyczka cienia nie ma funkcji budowania grubych źródeł/słoików javadocs.

Poniżej przedstawiam kilka krótkich zadań (javadocJar i sourcesJar), które zbudują grube javadoc i słoiki ze źródłami. Są one powiązane, aby zawsze były wykonywane po shadowJar. Ale nie ma zależności od wtyczki shadow jar.

subprojects { 
    apply plugin: 'java' 
} 

// Must be BELOW subprojects{} 
task alljavadoc(type: Javadoc) { 
    source subprojects.collect { it.sourceSets.main.allJava } 
    classpath = files(subprojects.collect { it.sourceSets.main.compileClasspath }) 
    destinationDir = file("${buildDir}/docs/javadoc") 
} 

task javadocJar(type: Jar, dependsOn: alljavadoc) { 
    classifier = 'javadoc' 
    from alljavadoc.destinationDir 
} 

task sourcesJar(type: Jar) { 
    classifier = 'sources' 
    from subprojects.collect { it.sourceSets.main.allSource } 
} 

shadowJar.finalizedBy javadocJar 
shadowJar.finalizedBy sourcesJar 

Uwaga, sekcja subprojects jest wymagane, nawet jeśli stosują już wtyczki java wewnątrz swoich podprojektów.

Należy również zauważyć, że nie obejmuje to javadocs bibliotek stron trzecich, od których mogą zależeć twoje podprojekty. Ale zwykle nie chciałbyś tego robić, prawdopodobnie.

+0

Będę wyglądać jak najszybciej, ale prawdziwa praca ma pierwszeństwo. – tbeernot

+0

OK, jest to dość bliskie z jednym zastrzeżeniem: JFXtras używa asciidoclet do generowania javadoc. Więc generacja Javadoc nie działa, ponieważ dokument nie został przygotowany do przetworzenia przez normalny silnik javadoc. Zobacz linię 144 https://github.com/JFXtras/jfxtras/blob/8.0/build.gradle – tbeernot

+0

Wyświetl komunikat o błędzie. Zauważ też, że w moim przykładzie zadania są poza klauzulą ​​podprojektów. W twoim pliku są w środku. –

Powiązane problemy