因此,我尝试将 Ivy 添加到我的项目中,该项目输出 WAR 文件。一些依赖项(例如 RESTEasy 和 Jackson)在 JBoss 运行时可用,因此我不希望将它们放在我的 war/WEB-INF/lib 文件夹中。其他库无法通过 JBoss 模块获得,因此我想将它们包含在我的项目中。
** 注意:在 Eclipse 中,我使用的是动态 Web 模块方面。这个想法是让 IvyDE 将所需的运行时依赖项复制到 war/WEB-INF/lib 中。
最初我创建了 2 个 ivy 配置文件:
- ivy.xml - 运行时(不包含在 WAR 中)
- ivy_web.xml - 包含在 war 中
然后我使用 GUI 配置与 Ant 检索任务等效的 IDE。因此,在我的 ANT 构建文件(我并不想在 IDE 中使用该文件)中,我有以下内容:
<ivy:retrieve pattern="war/WEB-INF/lib/[artifact]-[revision].[ext]" file="ivy-web.xml" type="jar" />
<ivy:retrieve pattern="lib/[artifact]-[revision].[ext]" file="ivy.xml" type="jar" />
- 尚不允许使用图片:-(
我在另一篇评论( mapping multiple ivy files in Eclipse )中注意到他们提到仅使用 1 个 ivy.xml - 但我不太确定如何到达那里?
哦,我也注意到了这一点:IvyDE + WTP: How to workaround that ivy library is ignored by WTP? - 但是我的项目没有使用正确类型的构面,我不想添加它们。
因此,在阅读这篇 ( https://stackoverflow.com/a/16575318/880884 ) 文章后,我向我的项目添加了编译和运行时配置。它看起来像这样:
<configurations>
<conf name="compile" description="used for building"/>
<conf name="runtime" description="used for running"/>
</configurations>
<dependencies>
<!-- compile -->
<dependency org="org.codehaus.jackson" name="jackson-core-asl" rev="1.9.2" conf="compile->default"/>
<dependency org="org.codehaus.jackson" name="jackson-xc" rev="1.9.2" conf="compile->default"/>
<dependency org="org.codehaus.jackson" name="jackson-jaxrs" rev="1.9.2" conf="compile->default"/>
<!-- runtime -->
<dependency org="com.google.guava" name="guava" rev="14.0.1" conf="runtime->default"/>
<dependency org="com.google.inject" name="guice" rev="3.0" conf="runtime->default"/>
<dependency org="aopalliance" name="aopalliance" rev="1.0" conf="runtime->default"/>
<dependency org="javax.inject" name="javax.inject" rev="1" conf="runtime->default"/>
</dependencies>
我再次尝试仅添加一个 ivy.xml。接下来,我进入项目属性 > Ivy > 检索列表 > 添加 - 添加了 2 个不同的配置,其中一个用于编译,映射到/lib。另一个使用“运行时”配置并指定“war/WEB-INF/lib/[artifact]-[revision].[ext]”作为检索模式。
但是,我最终在我的 war/WEB-INF/lib/中得到了“编译”,这不是我想要的。我只想将运行时依赖项复制到那里。
最佳答案
我认为您缺少的是在检索任务中使用配置:
<ivy:retrieve pattern="lib/[artifact]-[revision].[ext]" conf="compile" />
配置是 ivy 将依赖项分组在一起的机制。
示例
├── build.xml
├── ivy.xml
└── target
├── lib
│ ├── jackson-core-asl-1.9.2.jar
│ ├── jackson-jaxrs-1.9.2.jar
│ ├── jackson-mapper-asl-1.9.2.jar
│ └── jackson-xc-1.9.2.jar
├── reports
│ ├── ivy-report.css
│ ├── myorg-mymodule-compile.html
│ └── myorg-mymodule-runtime.html
└── war
└── WEB-INF
└── lib
├── aopalliance-1.0.jar
├── asm-3.1.jar
├── cglib-2.2.1-v20090111.jar
├── guava-14.0.1.jar
├── guice-3.0.jar
└── javax.inject-1.jar
build.xml
<project name="demo" default="retrieve" xmlns:ivy="antlib:org.apache.ivy.ant">
<property name="build.dir" location="target"/>
<target name="resolve" description="Use ivy to resolve dependencies">
<ivy:resolve/>
<ivy:report todir='${build.dir}/reports' graph='false' xml='false'/>
</target>
<target name="retrieve" depends="resolve" description="Populate directories">
<ivy:retrieve pattern="${build.dir}/lib/[artifact]-[revision].[ext]" conf="compile" />
<ivy:retrieve pattern="${build.dir}/war/WEB-INF/lib/[artifact]-[revision].[ext]" conf="runtime" />
</target>
<target name="clean" description="Cleanup build files">
<delete dir="${build.dir}"/>
</target>
<target name="clean-all" depends="clean" description="Additionally purge ivy cache">
<ivy:cleancache/>
</target>
</project>
注释:
- 上面的示例还生成了一个依赖项解析报告,我发现该报告对于查看每个配置的内容非常有用。
ivy.xml
<ivy-module version="2.0">
<info organisation="myorg" module="mymodule"/>
<configurations>
<conf name="compile" description="used for building"/>
<conf name="runtime" description="used for running"/>
</configurations>
<dependencies>
<!-- compile -->
<dependency org="org.codehaus.jackson" name="jackson-core-asl" rev="1.9.2" conf="compile->default"/>
<dependency org="org.codehaus.jackson" name="jackson-xc" rev="1.9.2" conf="compile->default"/>
<dependency org="org.codehaus.jackson" name="jackson-jaxrs" rev="1.9.2" conf="compile->default"/>
<!-- runtime -->
<dependency org="com.google.guava" name="guava" rev="14.0.1" conf="runtime->default"/>
<dependency org="com.google.inject" name="guice" rev="3.0" conf="runtime->default"/>
<dependency org="aopalliance" name="aopalliance" rev="1.0" conf="runtime->default"/>
<dependency org="javax.inject" name="javax.inject" rev="1" conf="runtime->default"/>
</dependencies>
</ivy-module>
关于eclipse - 如何在eclipse中使用Ivy + IvyDE将不同的jar放入lib和web-inf/lib中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221550/