我正在将Ivy用于我的项目,但我们使用Artifactory作为我们的jar存储库。我实际上使用<ivy:makepom>
Ant任务来创建Maven pom.xml
,因此我可以通过Maven deploy:deploy工作流将jar和wars部署回我的Maven存储库。
我构建了一个名为common-all.jar
的大罐子,需要大约30个罐子进行编译。我指定了大约10个罐子,Ivy拉下了依赖关系。作为编译过程的一部分,我指定了log4j jar和一些JBoss jar。当然,这些罐子将由我们的环境提供。
有了这个罐子,我也是一堆战争。我将common-all.jar
指定为我的依赖项的一部分,common-all.jar
所需的30个广告也被删除。一切都很好。
问题在于我建立战争。我不希望将JBoss罐子或log4j罐子作为战争的一部分包括在内。这些将由环境提供。我在pom.xml文件中将它们标记为提供。当我建立common-all.jar
时。
现在,问题是如何在编译战争代码时指定我想要这些,但我不想将它们包含在我的战争中。
以下是我的ivy.xml
文件示例。
如何指定common-all.jar
需要某些特定的jar用于编译,但是当我在战争中构建它时,我不想要所有这些jar
<ivy-module version="1.0">
<info
organisation="com.travelclick"
module="TC-AppUtil"
revision="4.1"
status="release"/>
<configurations>
<conf name="default" visibility="public"
description="The single built artifact. Nothing else"/>
<conf name="compile" visibility="public"
description="The master module and transitive dependencies"/>
<conf name="provided" visibility="public"
description="Needed for compile. Will be provided outside or war"/>
<conf name="runtime" visibility="public"
description="Not required for compile, but for runtime"
extends="compile"/>
<conf name="default" visibility="public"
description="The default configuration"
extends="runtime"/>
<conf name="test" visibility="private"
description="Required for testing" extends="runtime"/>
</configurations>
<dependencies>
<!-- Normal Compile Dependencies -->
<dependency org="ximpleware" name="vtd-xml"
rev="2.5" conf="compile->default"/>
<dependency org="com.travelclick" name="common-all"
rev="4.1" conf="compile->compile,runtime"/>
<!-- Testing -->
<dependency org="junit" name="junit"
rev="4.10" conf="test->default"/>
</dependencies>
</ivy-module>
答案 0 :(得分:3)
您还没有演示如何声明common-all依赖项,因此我将构成以下示例:
<dependency org="mygroup" name="common-all" rev="1.0" conf="compile->default;provided"/>
神奇的是配置映射:
在构建文件中,配置使用如下:
<project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">
<target name="resolve">
<ivy:resolve/>
<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="provided.path" conf="provided"/>
</target>
<target name="compile" depends="resolve">
<javac ...
<classpath>
<path refid="compile.path"/>
<path refid="provide.path"/>
</classpath>
</javac>
</target>
<target name="build" depends="compile">
<ivy:retrieve pattern="build/lib/[artifact].[ext]" conf="runtime"/>
<war ...
<lib dir="build/lib"/>
</war>
</target>
<target name="clean">
<delete dir="build"/>
<ivy:cleancache/>
</target>
</project>