2010-07-27 58 views
2

我有一個簡單的java應用程序,可以打印`hello world!'在控制檯上。它被包裝在app.jar中。 罐結構:創建可以在任何機器上執行的jar文件

主/ Hello.class - 我有燒灼的println方法

META-INF/MANIFEST.MF

清單文件主類包含以下內容:

Manifest-Version: 1.0 
Main-Class: main.Hello 

一切都很好。

但是,當你有一個依賴而不是麻煩開始。我不確定,但在這種情況下,您必須將所有庫都放到jar文件中。如果我把它們放在META-INF/lib中,我必須在manifest中指定「Class-Path」。 「Class-Path」將如何顯示?

P.S有一些類似的問題,但我還沒有找到合適的答案。

回答

1

我傾向於使用ANT構建腳本打包我的應用程序和所有必需的jar文件。我發現,一旦你的工作正常,這會讓生活變得更容易。

build.xml文件看起來像:

<project default="create_run_jar" name="Create Runnable Jar for MyProject"> 
    <!--ANT 1.7 is required --> 
    <target name="create_run_jar"> 
     <jar destfile="my-runnable-jar.jar"> 
      <manifest> 
       <attribute name="Main-Class" value="my.MainClass"/> 
       <attribute name="Class-Path" value="."/> 
      </manifest> 
      <fileset dir="E:/path/to/my/project/bin"/> 
      <fileset dir="E:/path/to/my/project/classes"/> 
      <zipfileset src="E:/path/to/library/some-library.jar"/> 
     </jar> 
    </target> 
</project> 

請注意,如果你使用Eclipse,你可以做simplly文件/導出... /運行的JAR文件,它會爲你做的一切(包括髮電ANT build.xml)。

1

如果您打開庫並將它們集成到項目中,則不必指定任何特殊的內容。如果你這樣做,你應該有一個「主」文件夾,如果你有org.apache.foo作爲外部庫,你還會在頂層有一個「org」文件夾。

+0

這是非常粗糙,但確定它的工作原理。我想將META-INF/lib文件夾中的庫jar包含在生成的jar文件中,所以問題仍然存在。 – Jeriho 2010-07-27 12:52:47

+0

對我來說聽起來不太好。我認爲OP是正確的,最好將jar放在你的jar中,並將它們添加到classpath中。 – 2010-07-27 12:53:48

相關問題