gpt4 book ai didi

java - Ant 在构建可运行的 jar 时卡住了

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:40 26 4
gpt4 key购买 nike

又是我。我一直在尝试使用 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>

一切顺利,但当它“运行”时卡住了。终端显示 run: 并没有任何反应。等了30分钟,什么也没有。我尝试了在互联网上找到的许多其他选项,但这些选项要么导致相同的延迟,要么引发 ClassNotFoundException。

我真的不知道该怎么办。当我用 Eclipse 制作文件时,一切正常。任何人都可以帮助我吗?这可能是完全愚蠢的事情,但我就是不明白。非常感谢。

最佳答案

要修复 ClassNotFoundException 异常,您需要在 jar 的 list 中包含类路径。 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

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

关于java - Ant 在构建可运行的 jar 时卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20644414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com