我正在使用Ivy来管理我的依赖项,在提供的jar上有一些问题
这是我的ivy.xml文件
<configurations>
<conf name="local" visibility="private" />
<conf name="compile" description="used for building" />
<conf name="test" extends="compile" description="used for testing" />
<conf name="runtime" description="used for running" />
<conf name="master" description="used for publishing" />
<conf name="default" extends="master, runtime" />
</configurations>
<dependencies>
<dependency org="xalan" name="xalan" rev="2.7.1"/>
<dependency org="org.w3c.css" name="sac" rev="1.3"/>
<dependency org="com.lowagie" name="itext" rev="2.0.8">
<exclude org="bouncycastle"/>
</dependency>
<!--Provided-->
<dependency org="javax.ejb" name="ejb-api" rev="3.0" conf="compile"/>
<dependency org="javax.jms" name="jms-api" rev="1.1-rev-1" conf="compile"/>
</dependencies>
Ejb和jms由容器提供
Affer执行我获得
---------------------------------------------------------------------
| | modules || artifacts |
| conf | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
| compile | 8 | 0 | 0 | 0 || 6 | 0 |
| default | 6 | 0 | 0 | 0 || 6 | 0 |
---------------------------------------------------------------------
所以Ivy正在改善依赖关系,但是当我执行这个
时<ivy:cachepath pathid="normal.classpath" />
<pathconvert property="expanded.normal.classpath" refid="normal.classpath"/>
<echo message="${expanded.normal.classpath}" file="normal.classpath.txt"/>
<ivy:cachepath conf="compile" pathid="compile.classpath" />
<pathconvert property="expanded.compile.classpath" refid="compile.classpath"/>
<echo message="${expanded.compile.classpath}" file="compile.classpath.txt"/>
两个classpath都是一样的。 谁知道为什么?
答案 0 :(得分:0)
我建议减少配置数量,并确保每个依赖项都有明确的映射。
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="demo"/>
<configurations>
<conf name="compile" description="used for building"/>
<conf name="runtime" description="used for running" extends="compile"/>
<conf name="test" description="used for testing" extends="runtime"/>
</configurations>
<dependencies>
<!-- compile dependencies -->
<dependency org="javax.ejb" name="ejb-api" rev="3.0" conf="compile->default"/>
<dependency org="javax.jms" name="jms-api" rev="1.1-rev-1" conf="compile->default"/>
<!-- runtime dependencies -->
<dependency org="xalan" name="xalan" rev="2.7.1" conf="runtime->default"/>
<dependency org="org.w3c.css" name="sac" rev="1.3" conf="runtime->default"/>
<dependency org="com.lowagie" name="itext" rev="2.0.8" conf="runtime->default">
<exclude org="bouncycastle"/>
</dependency>
</dependencies>
</ivy-module>
这将产生以下输出:
---------------------------------------------------------------------
| | modules || artifacts |
| conf | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
| compile | 2 | 2 | 2 | 0 || 2 | 2 |
| runtime | 7 | 7 | 7 | 0 || 7 | 7 |
| test | 7 | 7 | 7 | 0 || 7 | 7 |
---------------------------------------------------------------------
演示如何编译配置(如预期)以及测试配置如何与运行时相同(预期因为一个扩展另一个)。 我发现在ANT构建版本中需要的不仅仅是这3个不同的类路径。
我在你的报告中注意到没有下载任何内容。 cleancache任务对于定期运行并确保您的构建是新鲜的非常有用。
report常春藤对于正确理解传递依赖也非常有用。
<project name="demo" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
<target name="resolve" description="Use ivy to resolve classpaths">
<ivy:resolve/>
<ivy:report todir='build/ivy' graph='false' xml='false'/>
<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="test.path" conf="test"/>
</target>
<target name="clean">
<delete dir="build"/>
</target>
<target name="clean-all" depends="clean">
<ivy:cleancache/>
</target>
</project>
答案 1 :(得分:0)
第一个ivy:cachepath
没有定义conf,它会解析所有配置,因此每个模块都包含在内。
第二个ivy:cachepath
仅请求conf编译。因此,显然包括声明为conf="compile"
(conf="compile->compile"
的同义词)的依赖项。并且还包含没有任何conf
属性的依赖项,因为默认conf为*->*
。
有关依赖项配置的更多文档: