2015-01-12 10 views
5

Я использую gradle, и я хочу создать .jar с исходными файлами при выполнении publishToMavenLocal. Я получил, что легко работать:gradle publish Jar с исходными файлами и зависимостями в 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 { ... } 
    } 
} 

Однако pom.xml не хватает зависимостей.

Если я использую это:

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 { ... } 
    } 
} 

Где это только то, что одно изменение в MavenPublication, то я получаю полный pom.xml, но не источник, конечно. Я не могу найти способ включить как artifact jarWithSources, так и from components.java. Ошибка:

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

Подразумевая, что from components.java имеет type: Jar также.

Может ли кто-нибудь посоветовать, как я могу заставить все это работать?

Теперь, чтобы закончить этот вопрос, я должен сказать, что Gradle имеет очень очень крутую кривую обучения. Его компьютерный язык (DSL) должен быть детерминированным, хотя иногда мне интересно. У меня нет знаний, чтобы понять, как (например) from components.java работ (# 1). Для такой документации, как есть (например, http://www.gradle.org/docs/current/userguide/publishing_maven.html и руководство DSL), это не очень понятно. Я думаю, что документация может быть намного богаче. И там должна быть глава о «получении». Существует некоторый сдвиг в парадигме, который, кажется, нужно понять!

# 1 - насколько я понимаю, это дает вам то, что находится на http://www.gradle.org/docs/nightly/userguide/java_plugin.html#sec:java_plugin_and_dependency_management, но как это работает с from и в контексте MavenPublication?

+1

«очень очень крутая кривая обучения», я бы добавил несколько очень себя.Слишком много магии и плохого наименования – mhstnsc

+0

имеют ту же проблему и с обфускационными баночками – mhstnsc

ответ

3

Here вы можете найти рабочий пример, это достаточно, чтобы вызвать gradle clean publishToMavenLocal, чтобы артефакты сборки и опубликованы в Maven местного Maven репо (артефакт будет взят из числа имени папки версии неопределенных).

Кажется, что файл build.gradle должен быть слегка изменен. Опубликован ли проект, возможно, я попробую?

В начале град действительно кажется трудным, но после настройки первых проектов вы быстро поймаете его.

EDIT (после обсуждения в комментариях)

Чтобы включить оба источника и скомпилированные классы в одном банке добавить следующий фрагмент кода build.gradle:

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

И удалить задачу sourceJar и artifact раздел от publications. Он работает, однако, включая как источники, так и скомпилированные классы, является необычным и не является хорошей идеей.

Зависимости добавляются автоматически pom.xml - см. Для guice. Я обновил проект на GitHub.

+1

Да, это хорошо - прочитайте ошибку и посмотрите, есть ли столкновение классификатора. И поэтому выберите другой классификатор. Однако я действительно хочу, чтобы источники находились в одной банке, чтобы помочь с отладкой. Я не пробовал это, но я предполагаю, что если вы будете зависеть от источника jar, тогда будет достигнута такая же отладочная выгода. Хотя это будет работать, это означает, что нужно добавлять зависимость только для разработки. Я думаю, вы могли бы защитить его только тогда, когда развиваетесь, но затем это становится уродливым, особенно если у вас их куча. Так что хотите - источники в той же банке И имеют зависимости в пом. – HankCa

+0

Хорошо, попробуем это завтра. – Opal

+0

Спасибо. Я перечитываю свой комментарий, и это звучит немного грубо. Я хотел сказать, что я должен был прочитать сообщение об ошибке более близко, чтобы понять, что это было столкновение классификатора. Поэтому спасибо, что указали это. Но да, мне нужен другой результат! – HankCa

Смежные вопросы