Java:如何从包中编译可运行的jar?

时间:2010-03-27 00:54:48

标签: java makefile packages javac executable-jar

我的Java应用程序有一个与此类似的包结构:

src/com/name/app 
src/com/name/app/do 
src/com/name/utils/db

我如何将这些目录中的Java文件编译到可运行的jar中?我需要将所需的库打包到生成的JAR(jdbc)中。

我总是在Eclipse中完成这些工作,但现在我需要为几个人提供一种编译存储库而不使用eclipse的方法,我正在考虑制作一个makefile或一个调用必要的javac的脚本图案。

4 个答案:

答案 0 :(得分:5)

看看Ant。这是一个相对简单的构建工具,可以理解并提供满足您要求的所有内容。这是一个快速的框架build.xml,可以帮助您入门:

<project name="my_app_name" default="jar">

  <target name="compile">
     <javac srcdir="src" destdir="bin">
        <classpath>
           <fileset dir="lib">
              <include name="**/*.jar" />
           </fileset>
        </classpath>
     </javac>
  </target>

  <target name="jar">
     <jar manifest="manifest_file" destfile="dist/my_app_name.jar">
        <fileset dir="bin" />
        <fileset dir="lib" />
     </jar>
  </target>

您需要创建一个清单文件,该文件将告诉java进程哪个类包含“main”方法。 Here是开始了解清单的好地方。

作为产生非常混乱的Ant构建文件的替代方法,您可以右键单击Eclipse项目并选择“Export ...”,然后选择“General&gt; Ant Buildfiles”。

无论如何,这应该让你开始。在遇到这些问题时,您可以提出更具体的问题。

答案 1 :(得分:4)

首先,考虑将Ant用于此类任务。

但是既然你要求手动过程,你需要先创建一个manifest file,如下所示:

Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Class-Path: lib/jdbc.jar lib/otherlib.jar
Main-Class: com.name.app.MainClass

Class-Path 的内容替换为您的libs,将 Main-Class 替换为您的主类的完全限定名称。

然后,您需要使用以下命令生成实际的.jar:

jar cfm app.jar MANIFEST.MF src/com/name/app/*.class src/com/name/app/do/*.class

其中 MANIFEST.MF 是前面提到的清单文件,其余是.java类所在的文件夹。

最后,要运行您的应用,只需执行:java -jar app.jar

答案 2 :(得分:0)

考虑使用Ant来执行此操作。 http://ant.apache.org/

答案 3 :(得分:0)

我建议您使用Apache Ant来实现构建脚本。

如果正确实现,Ant易于使用,构建脚本可以在任何可以安装JDK的平台上运行。实际上,通过一些工作,您甚至可以设置项目,以便用户甚至不需要下载/安装Ant。 (提示:将Ant JAR文件和包装脚本添加到项目发行版中)