2014-10-28 1 views
1

Я в процессе преобразования нескольких проектов от муравья + плющ до Gradle.gradle добавить -source.jar к войне

Один из проектов (address) создает простой банку для включения в webapp. Я установил build.gradle, чтобы опубликовать банку и банку источников в моем личном репозитории плюща.

address/build.gradle выдержка:

apply plugin: 'java' 
apply plugin: 'publishing' 
apply plugin: 'ivy-publish' 

[...snip...] 

task sourceJar(type: Jar) { 
    from sourceSets.main.java 
    classifier "source" 
} 

publishing { 
    repositories { 
     ivy { 
      url 'http://dev.example.com/ivy/' 
      layout "pattern", { 
       artifact "[organisation]/[module]/[type]s/[artifact]-[revision].[ext]" 
      } 
     } 
    } 
    publications { 
     ivy(IvyPublication) { 
      from components.java 
      artifact(sourceJar) { 
       type "source" 
      } 
     } 
    } 
} 

я публикую это с gradlew publish. Мой веб-приложение, то есть зависимость от полученной баночке:

compile 'com.example:address:1.0.0' 

У меня есть проблема в том, что, когда я gradlew build на веб-приложение, войны WEB-INF/Библиотека включает в себя address-source-1.0.0.jar наряду с ожидаемым address-1.0.0.jar.

Я не могу понять, почему исходная банка включена в войну. Он не отображается в gradlew dependencies.

Вот это ivy.xml генерируется для кувшина:

<?xml version="1.0" encoding="UTF-8"?> 
<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven"> 
    <info organisation="com.example" module="address" revision="1.0.0" status="integration" publication="20141027154452"/> 
    <configurations> 
    <conf name="default" visibility="public" extends="runtime"/> 
    <conf name="runtime" visibility="public"/> 
    </configurations> 
    <publications> 
    <artifact name="address" type="jar" ext="jar" conf="runtime"/> 
    <artifact name="address" type="source" ext="jar" conf="runtime" m:classifier="source"/> 
    </publications> 
    <dependencies> 
    <dependency org="org.springframework" name="spring-asm" rev="3.0.5.RELEASE" conf="runtime-&gt;default"/> 
    <dependency org="org.springframework" name="spring-beans" rev="3.0.5.RELEASE" conf="runtime-&gt;default"/> 
    <dependency org="org.springframework" name="spring-context" rev="3.0.5.RELEASE" conf="runtime-&gt;default"/> 
    <dependency org="org.springframework" name="spring-expression" rev="3.0.5.RELEASE" conf="runtime-&gt;default"/> 
    <dependency org="org.springframework" name="spring-core" rev="3.0.5.RELEASE" conf="runtime-&gt;default"/> 
    <dependency org="log4j" name="log4j" rev="1.2.14" conf="runtime-&gt;default"/> 
    <dependency org="org.slf4j" name="jcl-over-slf4j" rev="1.5.6" conf="runtime-&gt;default"/> 
    <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.5.6" conf="runtime-&gt;default"/> 
    <dependency org="commons-lang" name="commons-lang" rev="2.4" conf="runtime-&gt;default"/> 
    <dependency org="org.slf4j" name="slf4j-api" rev="1.5.6" conf="runtime-&gt;default"/> 
    </dependencies> 
</ivy-module> 

ответ

0

Я думаю, что причина в том, что исходный артефакт опубликован в конфигурации выполнения, а также, если вы используете специальную конфигурацию (например источники), он должен работать:

publications { 
    ivyJava(IvyPublication) { 
    from components.java 
    configurations.create('sources') 
    artifact(sourceJar) { 
     conf "sources" 
    } 
    } 
} 

(configurations.create() необходима из GRADLE-3162)