2012-07-30 2 views
0

모듈의 jar 아티팩트에서 모듈의 종속성을 별도로 게시하려고합니다. 구성에 대한 Publish Only Dependencies

<?xml version="1.0" encoding="UTF-8"?> 
<ivy-module version="2.0"> 
    <info organisation="com.mycompany" module="platform" /> 
    <configurations defaultconfmapping="release->*;compile->*" defaultconf="release"> 
    <conf name="release" /> 
    <conf name="compile" extends="release" /> 
    </configurations> 
    <publications> 
    <artifact name="platform-api" type="jar" ext="jar" /> 
    </publications> 
    <dependencies> 
    <dependency org="com.google.inject" name="guice" rev="3.0" /> 
    <dependency org="org.slf4j" name="slf4j-api" rev="1.6.6" /> 

    <dependency org="com.google.guava" name="guava" rev="13.0-rc1" conf="compile" /> 
    <dependency org="log4j" name="log4j" rev="1.2.17" conf="compile" /> 
    <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.6" conf="compile" /> 
    </dependencies> 
</ivy-module> 

위, 나는 플랫폼-api.jar을하지 않고, guice에게 유일한 & SLF4J-API의 항아리를 포함 이슈를합니다. 나의 현재 솔루션은 종속 모듈이 의존성, 하나의 전이 및 기타 여부를 정의하는 것입니다

<dependency org="com.mycompany" name="platform" rev="1.0-SNAPSHOT" conf="myconf->release"> 
    <exclude org="com.mycompany" /> 
</dependency> 
<dependency org="com.mycompany" name="platform" rev="1.0-SNAPSHOT" transitive="false" conf="myotherconf->release" /> 

를하지만 세 번째 모듈은 이러한 모듈의 양쪽에 의존하는 경우이 솔루션은 문제가 발생하고, 그냥 못생긴입니다.

답변

5

대신을 시도해보십시오

<ivy-module version="2.0"> 
    <info organisation="com.mycompany" module="platform" /> 
    <configurations> 
    <conf name="default" description="runtime dependencies and master artifact can be used with this conf" extends="runtime,master"/> 
    <conf name="master" description="contains only the artifact published by this module itself, with no transitive dependencies"/> 
    <conf name="compile" description="Compile dependencies"/> 
    <conf name="runtime" description="Runtime dependencies, includes compile dependencies" extends="compile"/> 
    </configurations> 
    <publications> 
    <artifact name="platform-api" type="jar" ext="jar" conf="master"/> 
    </publications> 
    <dependencies> 
    <!-- Compile dependencies --> 
    <dependency org="com.google.inject" name="guice" rev="3.0" conf="compile->default"/> 
    <dependency org="org.slf4j" name="slf4j-api" rev="1.6.6" conf="compile->default"/> 
    <dependency org="com.google.guava" name="guava" rev="13.0-rc1" conf="compile->default" /> 

    <!-- Runtime dependencies --> 
    <dependency org="log4j" name="log4j" rev="1.2.17" conf="runtime->default" /> 
    <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.6" conf="runtime->default" /> 
    </dependencies> 
</ivy-module> 

참고 :

  • 참고 항아리의 큰 세트를 만드는 데 사용되는 구성에 대한 속성을 "확장".
  • 기본 구성 매핑을 제거하고 각 패밀리마다 명시 적으로 conf 매핑을 설정하는 것이 좋습니다. 간단하고 내 의견으로는 이해하기 궁극적으로 쉽게 (이하 매직) 이제 모듈이 게시 된 유물에 대해 별도의 구성을 가지고 있으며 런타임은 로컬 구성을 분리하기 위해이지도를 다음과 같이 하나의 의존성 선언을 사용할 수 종속성 있다는

:

<dependency org="com.mycompany" name="platform" rev="1.0-SNAPSHOT" conf="myconf->runtime;myotherconf->master" /> 
+0

감사합니다! 위의 사용법은 내 비전을 풍부하게하는 교과서 품질의 예이며 세 번째 모듈에 대한 해결책을 제시했습니다. – b10y

0

내 생각에, 당신이 찾고있는 것은 사실 두 프로젝트가 같은 의존성을 공유하고 있다고 생각합니다. (그리고 우연히 그들 중 하나는 다른 것을 사용하고있다). 그런 다음 종속성과 부모 - ivy.xml을 확장 플랫폼을 것

extendType="dependencies". 

:

은 당신이 http://ant.apache.org/ivy/history/latest-milestone/ivyfile/extends.html을 확장 사용을 고려했다. 그리고 당신의 Other 프로젝트는 같은 의존성에 대해 같은 parent-ivy.xml 파일을 확장합니다.

이 정도면 확실하지 않습니다. 구성이 여기에서 중요한 역할을 할 것이기 때문입니다. 하지만 어쩌면 시작일 수도 있습니다.