2010-05-22 126 views
7

从你们所有人的一点帮助... 我想将一个简单的java程序转换成jar,但似乎没有发生任何事情。 我有2个文件:Tester.java,Tester.Class。 然后我用以下命令行:-cvf创建Tester.jar Tester.class如何将Java程序转换为jar?

.jar文件,但似乎没有任何工作

罐子。 我错过了什么?

+2

@Matthew,我想这可能是OP想要的。 (设置Main-Class,你可以直接从jar中运行程序。)你的评论可以很好地作为实际的答案。 – Jonik 2010-05-22 08:52:56

回答

13

要在你创建你需要执行

java -cp Tester.jar your.package.Main 

执行罐子一种更加简便的jar文件运行的程序是要能够做到

java -jar Tester.jar 

也就是说,然而,要求您在清单文件中指定主要类,该清单文件应包含在jar文件中:

  • Manifest-Version: 1.2 
    Main-Class: your.package.Main 
    

    在manifest.txt

  • 而创建的jar:

    jar cvfm Tester.jar manifest.txt Tester.class 
    
+1

+1,非常清晰简洁的基本解释 – Jonik 2010-05-22 09:50:45

+0

@aioobe如果我只使用一个不在包中的简单类,我该怎么办? – pharaon450 2014-06-27 17:49:39

+0

和我的回答一样,没有'your.package.',我想。 – aioobe 2014-06-27 20:58:40

6

马修•富兰琛评论answered,你需要有一个“清单文件“,并且应该包含Main-Class头指出哪个是jar中的主要类,以执行exec UTE。 The answer by aioobe完美地说明了最简单的方法。

但不是这样做,总是“手动”,我建议你看看在构建工具,如Apache Ant(或Maven,但是这可能有点难以上手),其非常常用于自动化这些构建序列。

使用Ant,你会创建一个这样的“构建文件”(最常见的命名build.xml):

<project name="Tester"> 
    <target name="build" 
      description="Compiles the code and packages it in a jar."> 

     <javac srcdir="src" destdir="classes" source="1.6" target="1.6"/> 

     <jar destfile="Tester.jar"> 
      <fileset dir="classes"/> 
      <manifest> 
       <attribute name="Main-Class" value="com.example.Tester"/> 
      </manifest> 
     </jar> 
    </target> 
</project> 

现在,调用ant build将编译代码,并在“Tester.jar”打包,该也将包含正确类型的清单标题,以便您可以使用java -jar Tester.jar运行它。 (请注意,此示例假定您的源位于“src”目录中,与您运行命令的位置相关。当然你还需要安装Ant。)

如果你决定试用Ant,它的official manual将非常有用(特别是Ant的“任务”列表,例如显示你可以给的选项具体任务如javacjar)。

2

我建议使用一些像Netbeans,Eclipse,IntelliJ IDEA这样的IDE并专注于您的编程(点击构建yor程序)。