繁体   English   中英

将 Jar 添加到 Ant 构建

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM