2014-10-28 3 views
1

나는 많은 프로젝트를 개미 + 아이비에서 Gradle로 변환하고있다.gradle 추가 -source.jar to war

프로젝트 중 하나 (address)는 웹 응용 프로그램에 포함시킬 간단한 jar를 생성합니다. jar와 소스 항아리를 개인 ivy 저장소에 게시하기 위해 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/lib 디렉토리가 예상 address-1.0.0.jar과 함께 address-source-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의 필요)