如何用 Apache Ant 生成 运行.jar 文件?
How to run .jar file generated with Apache Ant?
我正在使用内置 Apache Ant 1.9.4 的 IntelliJ IDEA 2016.3.1。我使用下面给出的脚本文件来构建我的项目。 jar 目标生成 .jar 文件没有任何错误。我可以 运行 我的应用程序来自 IDE。但是,我无法从 .jar 文件 运行 我的应用程序。我究竟做错了什么? 运行 .jar 文件的特殊方式
<project name="RegexDemo" basedir=".">
<property name="version">1.0.0</property>
<property name="dir.src">src/com/fagan/demo</property>
<property name="dir.build">build</property>
<property name="dir.build.classes">${dir.build}/classes</property>
<property name="dir.build.javadoc">${dir.build}/javadoc</property>
<property name="file.jar">${dir.build}/RegexDemo-${version}.jar</property>
<path id="projectClasspath">
<fileset dir="lib">
<include name="**.jar"/>
</fileset>
</path>
<target name="clean">
<delete dir="${dir.build}"/>
</target>
<target name="init">
<mkdir dir="${dir.build}"/>
<mkdir dir="${dir.build.classes}"/>
</target>
<target name="compile" depends="init">
<echo>Compiling Java source</echo>
<javac classpathref="projectClasspath"
srcdir="${dir.src}"
destdir="${dir.build.classes}"/>
</target>
<target name="jar" depends="compile">
<echo>Making JAR file</echo>
<jar basedir="${dir.build.classes}" file="${file.jar}"/>
</target>
<target name="javadoc">
<echo>Making JavaDoc from source</echo>
<javadoc sourcepath="${dir.src}" destdir="${dir.build.javadoc}"/>
</target>
</project>
编辑:
我用以下代码片段替换了我的 jar 目标,但它也没有用
<target name="jar" depends="compile">
<echo>Making JAR file</echo>
<jar basedir="${dir.build.classes}" file="${file.jar}">
<manifest>
<attribute name="Main-Class" value="com.fagan.demo.MainWindow"/>
<attribute name="Class-Path" value="${file.jar}"/>
</manifest>
</jar>
</target>
编辑 2: 这是我的 MANIFEST.MF 文件
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.8.0_111-b14 (Oracle Corporation)
Main-Class: com.fagan.demo.MainWindow
Class-Path: build/RegexDemo-1.0.0.jar
检查 MANIFEST 中提到的 Main-class 是否存在于 jar 文件中,并检查 Manifest 中 ANT 生成的条目是否实际存在。
此外,您应该在 jar 任务中使用 destfile 属性而不是文件属性。
如果我理解有误,请纠正我,如果您希望通过简单的双击运行,那么它不会运行。制作好jar后,使用命令java -jar 执行即可。或者,您可以将此命令放在 jar 旁边的批处理 file/shell 脚本中,然后双击它就可以正常工作。希望这有帮助。
我正在使用内置 Apache Ant 1.9.4 的 IntelliJ IDEA 2016.3.1。我使用下面给出的脚本文件来构建我的项目。 jar 目标生成 .jar 文件没有任何错误。我可以 运行 我的应用程序来自 IDE。但是,我无法从 .jar 文件 运行 我的应用程序。我究竟做错了什么? 运行 .jar 文件的特殊方式
<project name="RegexDemo" basedir=".">
<property name="version">1.0.0</property>
<property name="dir.src">src/com/fagan/demo</property>
<property name="dir.build">build</property>
<property name="dir.build.classes">${dir.build}/classes</property>
<property name="dir.build.javadoc">${dir.build}/javadoc</property>
<property name="file.jar">${dir.build}/RegexDemo-${version}.jar</property>
<path id="projectClasspath">
<fileset dir="lib">
<include name="**.jar"/>
</fileset>
</path>
<target name="clean">
<delete dir="${dir.build}"/>
</target>
<target name="init">
<mkdir dir="${dir.build}"/>
<mkdir dir="${dir.build.classes}"/>
</target>
<target name="compile" depends="init">
<echo>Compiling Java source</echo>
<javac classpathref="projectClasspath"
srcdir="${dir.src}"
destdir="${dir.build.classes}"/>
</target>
<target name="jar" depends="compile">
<echo>Making JAR file</echo>
<jar basedir="${dir.build.classes}" file="${file.jar}"/>
</target>
<target name="javadoc">
<echo>Making JavaDoc from source</echo>
<javadoc sourcepath="${dir.src}" destdir="${dir.build.javadoc}"/>
</target>
</project>
编辑: 我用以下代码片段替换了我的 jar 目标,但它也没有用
<target name="jar" depends="compile">
<echo>Making JAR file</echo>
<jar basedir="${dir.build.classes}" file="${file.jar}">
<manifest>
<attribute name="Main-Class" value="com.fagan.demo.MainWindow"/>
<attribute name="Class-Path" value="${file.jar}"/>
</manifest>
</jar>
</target>
编辑 2: 这是我的 MANIFEST.MF 文件
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.8.0_111-b14 (Oracle Corporation)
Main-Class: com.fagan.demo.MainWindow
Class-Path: build/RegexDemo-1.0.0.jar
检查 MANIFEST 中提到的 Main-class 是否存在于 jar 文件中,并检查 Manifest 中 ANT 生成的条目是否实际存在。 此外,您应该在 jar 任务中使用 destfile 属性而不是文件属性。
如果我理解有误,请纠正我,如果您希望通过简单的双击运行,那么它不会运行。制作好jar后,使用命令java -jar 执行即可。或者,您可以将此命令放在 jar 旁边的批处理 file/shell 脚本中,然后双击它就可以正常工作。希望这有帮助。