构build可运行的jar时Ant会卡住

又是我。 我一直在尝试使用ant脚本将Java项目创build为可运行的jar。 这是我的build.xml

<project name="simple-app" basedir="." default="main"> <property name="src.dir" value="src" /> <property name="build.dir" value="build" /> <property name="classes.dir" value="${build.dir}/classes" /> <property name="jar.dir" value="${build.dir}/jar" /> <property name="lib.dir" value="lib" /> <property name="main-class" value="app.App" /> <path id="classpath"> <fileset dir="${lib.dir}"> <include name="*.jar" /> </fileset> <dirset dir="${build.dir}"> <include name="classes"/> </dirset> </path> <target name="clean"> <delete dir="${build.dir}" /> </target> <target name="compile"> <mkdir dir="${classes.dir}"/> <javac source="1.7" target="1.7" includeantruntime="false" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" /> </target> <target name="jar" depends="compile"> <mkdir dir="${jar.dir}" /> <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}" includes="*.class"> <manifest> <attribute name="Main-Class" value="${main-class}" /> </manifest> </jar> </target> <target name="run" depends="jar"> <java classname="${main-class}"> <classpath> <path refid="classpath" /> <path location="${jar.dir}/${ant.project.name}.jar" /> </classpath> </java> </target> <target name="main" depends="clean,run"/> </project> 

一切顺利,但是当它“运行”时就会卡住了。 terminal说运行:没有任何反应。 等了30分钟,什么也没有。 我尝试了很多其他的select,我发现互联网上,但是导致相同的滞后,或抛出ClassNotFoundException。

我认真不知道该怎么做。 当我用Eclipse制作文件时,一切正常。 任何人都可以帮助我? 这可能是非常愚蠢的,但我只是不明白。 非常感谢你。

要修复ClassNotFoundException异常,您需要将类路径包含在jar的清单中。 manifestclasspath任务非常有用:

 <target name="jar" depends="compile"> <mkdir dir="${jar.dir}" /> <manifestclasspath property="jar-classpath" jarfile="${jar.dir}/${ant.project.name}.jar"> <classpath refid="classpath" /> </manifestclasspath> <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}" includes="*.class"> <manifest> <attribute name="Main-Class" value="${main-class}" /> <attribute name="Class-Path" value="${jar-classpath}" /> </manifest> </jar> </target> 

这使您能够如下调用jar:

 <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/> 

或从命令行:

 java -jar /path/to/myproject.jar 

最后,这可能无法解释为什么你的构建挂….是否有可能代码进入等待状态?