2015-01-12 20 views
5

Używam gradle i chcę utworzyć .jar z plikami źródłowymi podczas wykonywania publishToMavenLocal. Mam że łatwo pracować:gradle publikacji Jar z plikami źródłowymi i zależnościami w POM

task jarWithSources(type: Jar) { 
    from sourceSets.main.output 
    if (gradle.startParameter.taskNames.any{it == "publishToMavenLocal"}) { 
     from sourceSets.main.allJava 
    } 
} 

publishing { 
    publications { 
     // publish the data_deposit jar as a standalone artifact 
     mavenJar(MavenPublication) { 
      artifact jarWithSources 
      artifactId "${jar.baseName}_jar" 
      version project.version 
     } 
    } 
    repositories { 
     maven { ... } 
    } 
} 

Jednak pom.xml brakuje zależności.

Jeśli używam to:

publishing { 
    publications { 
     // publish the data_deposit jar as a standalone artifact 
     mavenJar(MavenPublication) { 
      // artifact jarWithSources // Stopped using this 
      from components.java   // Have added this 
      artifactId "${jar.baseName}_jar" 
      version project.version 
     } 
    } 
    repositories { 
     maven { ... } 
    } 
} 

Gdzie to jest tylko jedna zmiana w MavenPublication, następnie uzyskać pełną pom.xml ale nie źródło oczywiście. Nie mogę znaleźć sposobu na uwzględnienie zarówno artifact jarWithSources, jak i from components.java. Błąd jest:

Invalid publication 'mavenJar': multiple artifacts with the identical extension and classifier ('jar', 'null'). 

sugerując, że from components.java jest type: Jar również.

Czy ktoś może doradzić, jak mogę to wszystko osiągnąć?

Teraz, aby zakończyć to pytanie, muszę powiedzieć, że Gradle ma bardzo bardzo bardzo stromą krzywą uczenia się. Jest to język komputerowy (DSL), więc musi być deterministyczny, choć czasem się zastanawiam. Nie mam wiedzy, aby zrozumieć, jak działa (na przykład) from components.java (# 1). Dla tyle dokumentacji, ile jest (np. http://www.gradle.org/docs/current/userguide/publishing_maven.html i przewodnika DSL), nie jest to bardzo jasne. Myślę, że dokumentacja mogłaby być o wiele bogatsza. I musi być rozdział o "zdobyciu". Istnieje pewna zmiana paradygmatu, która wydaje się potrzebna do zrozumienia!

# 1 - jak najlepiej rozumiem, daje to, co jest w http://www.gradle.org/docs/nightly/userguide/java_plugin.html#sec:java_plugin_and_dependency_management, ale jak to działa z from i w kontekście MavenPublication?

+1

"bardzo bardzo bardzo stroma krzywa uczenia się" dodałbym kilka bardzo sam.Za dużo magii i zła nazwa – mhstnsc

+0

mają ten sam problem z zaciemnionymi słojami. – mhstnsc

Odpowiedz

3

Here można znaleźć pracy przykład, to wystarczy, aby wywołać gradle clean publishToMavenLocal mieć artefakty budować i opublikowane do Maven lokalnego repo maven (artefakt zostanie pobrana z numerem wersji nazwa folderu jest nieokreślony).

Wygląda na to, że plik build.gradle powinien być nieco zmieniony. Czy projekt został opublikowany, czy mogę spróbować?

Na początku ocena rzeczywiście wydaje się trudna, ale po skonfigurowaniu pierwszych projektów szybko ją przechwycisz.

EDIT (po dyskusji w komentarzach)

obejmuje zarówno źródła i skompilowanych klas w jednym słoiku dodać następujący fragment kodu do build.gradle:

jar { 
    from sourceSets.main.output 
    from sourceSets.main.allJava 
} 

i usunąć zadanie sourceJar i artifact sekcja od publications. Działa jednak w tym, że zarówno źródła, jak i skompilowane klasy są nietypowe i nie są dobrym pomysłem.

Zależności są dodawane automatycznie zainstalowane pom.xml - patrz dla guice. Zaktualizowałem projekt na GitHub.

+1

Tak, to dobrze - przeczytaj błąd i zobacz, jak zderza się klasyfikator. A więc wybierz inny klasyfikator. Jednak faktycznie chcę, aby źródła były w tym samym słoiku, aby pomóc w debugowaniu. Nie próbowałem tego, ale wyobrażam sobie, że jeśli będziesz zależny od źródeł słoików, to uzyskasz tę samą korzyść z debugowania. Chociaż to zadziałałoby, oznacza to konieczność dodania zależności tylko dla rozwoju. Sądzę, że mógłbyś go strzec, aby zdarzyło się to tylko przy rozwijaniu, ale wtedy staje się to brzydkie, szczególnie jeśli masz ich mnóstwo. Tak więc chcę - źródła w tym samym słoiku I mają zależności w pom. – HankCa

+0

OK, spróbuję tego na jutro. – Opal

+0

Dzięki. Ponownie przeczytałem mój komentarz i brzmi to trochę niegrzecznie. Chciałem powiedzieć, że powinienem był przeczytać komunikat o błędzie bliżej, aby zdać sobie sprawę, że to było starcie klasyfikatora. Dziękuję za wskazanie tego. Ale tak, potrzebuję innego wyniku! – HankCa

Powiązane problemy