如何从终端创建可执行 jar 文件

How to create an executable jar file from terminal

如何从 java 源代码中正确构建 java .jar 文件。经过一些研究,似乎构建工具 ant 被认为是配置庄园的最佳实践之一,其中 .java 源文件被构建到 .class 文件中并最终存储在 .jar 文件中.

对于我的项目文件夹,我基本上将我的 .java 源代码放在 src/classes/HelloWorld.java 中,我在根目录中放了一个 build.xml 文件。

除了 build.xml 文件中用于指定程序入口点的指令外,我似乎一切正常。就目前而言,它导致:

<attribute name="Main-Class" value="com.tutorialspoint.util.FaxUtil"/> 

但我希望它能引导到我的 src/HelloWorld.java 文件中的主要方法。

ant 的 website 提供了更完整(但基本)的使用 ant 的教程。

首先,您需要一个开发环境设置,其中包含用于编译 .java 文件的 javac 和用于编写构建过程脚本的 ant。对于某些操作系统,它就像 运行 一样简单,例如 $ sudo apt-get install ant openjdk-7-jdk 之类的命令,但其他操作系统会希望搜索更适合它们的内容。

您的目录结构应如下所示:

.
├── build.xml
├── README.md
├── src
    └── hello
        └── HelloWorld.java

您的 Hello World 源代码应如下所示(在 HelloWorld.java 中)

// This line is important and tells java that this code is a package of 
// code named 'hello'
package hello; 

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

改编的 build.xml 文件会像这样(尽管包含未使用的元素):

<?xml version="1.0"?>
<project basedir="." default="build">
  <property name="src.dir" value="src"/>
  <property name="web.dir" value="war"/>
  <property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
  <property name="name" value="hello"/>

  <path id="master-classpath">
    <fileset dir="${web.dir}/WEB-INF/lib">
      <include name="*.jar"/>
    </fileset>
    <pathelement path="${build.dir}"/>
  </path>

  <target name="build" description="Compile source tree java files">
    <mkdir dir="${build.dir}"/>
    <mkdir dir="${web.dir}/WEB-INF/lib"/>
    <javac includeantruntime="false" destdir="${build.dir}" source="1.5" target="1.5">
      <src path="${src.dir}"/>
      <classpath refid="master-classpath"/>
    </javac>
  </target>

  <target name="clean" description="Clean output directories">
    <delete dir="war"/>
  </target>

  <target name="build-jar" depends="build">
    <jar destfile="${web.dir}/lib/hello.jar"
         basedir="${build.dir}"
         includes="**"
         excludes="**/Test.class">

      <manifest>
        <attribute name="Main-Class" value="hello.HelloWorld"/>
      </manifest>

    </jar>
  </target>

</project>

从那里开始,就像从命令行构建项目一样简单

$  ant clean
$  ant build-jar