我使用Maven进行项目配置,使用Ant为我的某些实用程序类创建jar。当我从 build.xml 为我的类创建jar时,我遇到了编译错误,因为一些第三方jar用maven配置并且这些jar在我的项目中不存在。如果是这样,如何解决?我需要从build.xml编译pom.xml吗?或者我也可以从 Maven 创建jar文件吗?有什么建议吗?
答案 0 :(得分:5)
现在我已经与Maven ant Task完全合作了。现在我可以从ant build.xml获取所有依赖jar。我可以通过以下两种方式获得它们......
<强> 1。将所有jar文件复制到特定位置,并将其添加到类路径
中<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project name="Ant-Test" default="main" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<path id="maven-ant-tasks.classpath" path="libs/maven-ant-tasks-2.1.3.jar" />
<typedef resource="org/apache/maven/artifact/ant/antlib.xml"
uri="antlib:org.apache.maven.artifact.ant"
classpathref="maven-ant-tasks.classpath" />
<artifact:pom id="mypom" file="pom.xml" />
<artifact:dependencies filesetId="mydeps" pomRefId="mypom" />
<target name="resolve" description="--> retrieve dependencies with maven">
<!-- Resolve dependencies -->
<artifact:dependencies filesetId="dependency.fileset">
<pom file="pom.xml" />
</artifact:dependencies>
<!-- Copy all dependencies to the correct location. -->
<copy todir="libs">
<fileset refid="dependency.fileset" />
<!-- This mapper strips off all leading directory information -->
<mapper type="flatten" />
</copy>
</target>
<property file="build.properties"/>
<path id="build.classpath">
<fileset dir = ".">
<include name="**/*.jar" />
</fileset>
</path>
<target name="clean">
<delete dir="${build.dir}" />
<delete dir="${docs.dir}" />
<delete dir="${dist.dir}" />
</target>
<target name="makedir">
<mkdir dir="${build.dir}" />
<mkdir dir="${docs.dir}" />
<mkdir dir="${dist.dir}" />
</target>
<target name="compile" depends="clean, makedir">
<javac includeantruntime="false" srcdir="${src.dir}" destdir="${build.dir}" classpathref="build.classpath">
<compilerarg value="-Xlint:unchecked"/>
</javac>
</target>
<target name="main" depends="resolve , compile">
<description>Main target</description>
</target>
2.Load pom.xml并将其作为文件集引用
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project name="Ant-Test" default="main" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<path id="maven-ant-tasks.classpath" path="libs/maven-ant-tasks-2.1.3.jar" />
<typedef resource="org/apache/maven/artifact/ant/antlib.xml"
uri="antlib:org.apache.maven.artifact.ant"
classpathref="maven-ant-tasks.classpath" />
<property file="build.properties"/>
<!-- Load pom.xml for dependencies -->
<artifact:pom id="pomfile" file="pom.xml" />
<artifact:dependencies filesetId="mvn-dependencies" pomRefId="pomfile" />
<path id="build.classpath">
<fileset refid="mvn-dependencies" />
</path>
<target name="clean">
<delete dir="${build.dir}" />
<delete dir="${docs.dir}" />
<delete dir="${dist.dir}" />
</target>
<target name="makedir">
<mkdir dir="${build.dir}" />
<mkdir dir="${docs.dir}" />
<mkdir dir="${dist.dir}" />
</target>
<target name="compile" depends="clean, makedir">
<javac includeantruntime="false" srcdir="${src.dir}" destdir="${build.dir}" classpathref="build.classpath">
<compilerarg value="-Xlint:unchecked"/>
</javac>
</target>
<target name="main" depends="compile">
<description>Main target</description>
<echo> Finish Building for project - ${projectName}</echo>
</target>
答案 1 :(得分:2)
您可以使用Maven Ant Tasks。它们的设计就是为了这个目的。
答案 2 :(得分:1)
这就是我的理解。您想要创建一个jar(包括一些实用程序类)
当您将maven作为工具时,您的项目库中不存在jar,它们存在于您的本地存储库(〜/ .m2)中,因此ant无法找到您的第三方jar。
用pven做这件事就是其中一种方法。在here 找到您的解决方案CHEERS!
答案 3 :(得分:1)
考虑使用Apache Ivy。它是一个旨在与Ant一起使用的依赖管理,它与Maven存储库完全兼容。
您可能需要使用convert Ant任务将{pom.xml convertpom放入ivy.xml(常春藤项目描述符),然后使用Ivy Ant tasks(常春藤:解析,常春藤:检索)从maven存储库中获取所有第三方罐子。