[英]Adding Jar To Ant Build
我尝试将 json jar 添加到我的 Travis-CI ant 构建中,我还在 stackoverflow 中检查了问题,这个问题可能是重复的,但我无法处理它。 当 travis 编译我的代码时,它不能是 JSON,我想我在构建 xml 中做错了。 请帮助我,我是 Ant 的新手。
<project name="Hello" basedir="." default="main">
<property name="dir.src" value="src"/>
<property name="dir.build" value="build"/>
<property name="dir.classes" value="${dir.build}/classes"/>
<property name="dir.jar" value="${dir.build}/jar"/>
<property name="main-class" value="TestConsole"/>
<target name="clean">
<delete dir="${dir.build}"/>
</target>
<target name="compile">
<mkdir dir="${dir.classes}"/>
<javac srcdir="${dir.src}" destdir="${dir.classes}"/>
</target>
<target name="jar" depends="clean, compile">
<mkdir dir="${build}/${jar}" />
<jar destfile="src/json-simple-1.1.1.jar" basedir="${build}/${classes}">
<manifest>
<attribute name="Main-Class" value="MainClass" />
</manifest>
</jar>
</target>
<target name="run" depends="jar">
<java jar="${dir.jar}/${ant.project.name}.jar" fork="true"/>
</target>
<target name="clean-build" depends="clean,jar"/>
<target name="main" depends="clean,run"/>
</project>
这是因为 java 编译器无法找到编译所需的类。 您需要通过类路径将所有必需的 jar 提供给javac
。
因此,在您的构建 xml 中,您需要像这样指定类路径:
<path id="project.class.path">
<pathelement location="bin/"/> <!-- to put a folder in class path -->
<pathelement location="lib/helper.jar"/> <!-- to put a jar in class path -->
<pathelement path="${java.class.path}/"/>
</path>
然后在执行javac
使用此类路径,如下所示:
<javac srcdir="${dir.src}" destdir="${dir.classes}">
<classpath refid="project.class.path"/>
</javac>
同样,您必须在使用java
运行类时执行此操作
请参阅编写一个简单的构建文件以获取更多信息。
这是我的解决方案
<project name="Hello" basedir="." default="main">
<property name="dir.src" value="src"/>
<property name="dir.build" value="build"/>
<property name="dir.classes" value="${dir.build}/classes"/>
<property name="dir.jar" value="${dir.build}/jar"/>
<property name="dir.lib" value="."/>
<property name="main-class" value="TestConsole"/>
<target name="clean">
<delete dir="${dir.build}"/>
</target>
//Edited part
<target name="compile">
<mkdir dir="${dir.classes}"/>
<javac srcdir="${dir.src}" destdir="${dir.classes}">
<classpath>
<fileset dir="${dir.lib}">
<include name="**/*.jar" />
</fileset>
</classpath>
</javac>
</target>
<target name="jar" depends="compile">
<mkdir dir="${dir.jar}"/>
<jar destfile="${dir.jar}/${ant.project.name}.jar" basedir="${dir.classes}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
<zipgroupfileset dir="${dir.lib}" includes="**/*.jar"/>
</jar>
//Edited part ends here
</target>
<target name="run" depends="jar">
<java jar="${dir.jar}/${ant.project.name}.jar" fork="true"/>
</target>
<target name="clean-build" depends="clean,jar"/>
<target name="main" depends="clean,run"/>
</project>
我想添加这个例子,它涵盖了如何在不同的 ant 命令之间共享在classpath.test
(例如 gson)中找到的依赖项,这将使 CI 通过这个 build.xml on ant test
命令!
<project name="junit-example">
<property name="main.build.dir" value="build/main"/>
<property name="main.src.dir" value="src/package"/>
<property name="test.build.dir" value="build/test"/>
<property name="test.src.dir" value="tests/package"/>
<path id="classpath.test">
<pathelement location="lib/junit-4.12.0.jar"/>
<pathelement location="lib/org.hamcrest.core_1.3.0.jar"/>
<pathelement location="lib/gson-2.8.6.jar"/>
<pathelement location="${main.build.dir}"/>
</path>
<target name="compile">
<mkdir dir="${main.build.dir}"/>
<javac srcdir="${main.src.dir}" destdir="${main.build.dir}" includeantruntime="false">
<classpath refid="classpath.test"/>
</javac>
</target>
<target name="test-compile" depends="compile">
<mkdir dir="${test.build.dir}"/>
<javac srcdir="${test.src.dir}" destdir="${test.build.dir}" includeantruntime="false">
<classpath refid="classpath.test"/>
</javac>
</target>
<target name="test" depends="test-compile">
<junit printsummary="on" haltonfailure="yes" fork="true">
<classpath>
<path refid="classpath.test"/>
<pathelement location="${test.build.dir}"/>
</classpath>
<formatter type="brief" usefile="false" />
<batchtest>
<fileset dir="${test.build.dir}" includes="**/*Test*" />
</batchtest>
</junit>
</target>
</project>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.