蚂蚁在建立可运行的罐子时卡住了
问题描述:
它又是我。 我一直在尝试使用ant脚本将Java项目创建为可运行的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>
一切顺利,但是当它到达“运行”它卡住。终端说跑步:没有任何反应。等了30分钟,什么都没有。我尝试了很多其他的选项,我在互联网上发现了这些选项,但是这些选项会导致相同的延迟,或抛出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
这到底可能无法解释为什么你的构建挂起....是否有可能代码进入等待状态?
您是否尝试手动运行.jar?它工作吗? – dimoniy
你到底是怎么做到的?对不起,一直在寻找这个3-4小时,所以我慢一点。 – user2950356
你有你的jar文件作为“罐子”目标的结果。试着从命令行运行它。 http://docs.oracle.com/javase/tutorial/deployment/jar/run.html只需要小心地将所有的依赖包括在类路径中。 – dimoniy