我在一个非常大的java项目中工作,由许多较小的maven模块和一个使用ant维护的web模块组成。现在,我需要访问在maven模块中编写的web模块项目。是否有可能以某种方式添加maven模块到ant项目?
我试过从maven模块制作jar文件,并简单地将它们添加到ant项目,但我收到错误ClassNotFoundException
和NoClassDefFoundError
。
您可以通过使用maven Ant任务将maven依赖项集成到Apache Ant中。
使用像Nexus, Artifactory或Archiva这样的Maven存储库管理器来存储由Maven项目构建的jar。
ANT的Apache ivy插件可以用来拉出这些依赖项(ivy也可以用来在Maven仓库中存储jar,但这是另一个问题)。
<标题> 例子├── build.xml
├── ivysettings.xml
└── target
└── WEB-INF
└── lib
├── log4j-1.2.17.jar
├── slf4j-api-1.7.5.jar
└── slf4j-log4j12-1.7.5.jar
build . xml
<project name="demo" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
<property name="build.dir" location="target"/>
<available classname="org.apache.ivy.Main" property="ivy.installed"/>
<target name="resolve" depends="install-ivy" description="Use ivy to resolve classpaths">
<ivy:retrieve pattern="${build.dir}/WEB-INF/lib/[artifact]-[revision].[ext]">
<dependency org="org.slf4j" name="slf4j-api" rev="1.7.5" conf="default"/>
<dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.5" conf="default"/>
</ivy:retrieve>
</target>
<target name="install-ivy" unless="ivy.installed">
<mkdir dir="${user.home}/.ant/lib"/>
<get dest="${user.home}/.ant/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar"/>
<fail message="Ivy installed run build again"/>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="clean-all" depends="clean">
<ivy:cleancache/>
</target>
</project>
指出:
- "install-ivy"目标是可选的,我推荐的方法是确保在构建服务器上安装了ivy插件jar
- ivy检索任务用于解析依赖项并将它们放置在项目空间
- ivy cleancache任务清除本地ivy缓存。
ivysettings.xml
<ivysettings>
<settings defaultResolver="my-resolvers"/>
<resolvers>
<chain name="my-resolvers" returnFirst="true">
<ibiblio name="central" m2compatible="true"/>
<ibiblio name="myrepo" root="http://mavenrepo/path/to/repo" m2compatible="true"/>
</chain>
</resolvers>
</ivysettings>
注意:
- ivy配置文件是可选的,这个例子演示了Maven Central和本地Maven存储库如何作为依赖源使用。