2012-09-07 59 views
0

我想創建一個關於它所需庫的「自包含」的jar文件。帶有組合庫的jar文件中的類路徑

因此,我創建了以下Ant文件:

<project name="srv" default="prod"> 
    <target name="prod"> 
     <jar destfile="build/ServerApplication.jar" basedir="bin/"> 
      <restrict> 
      <name name="**/*.class"/> 
      <archives> 
       <zips> 
       <fileset dir="lib/" includes="**/*.jar"/> 
       </zips> 
      </archives> 
      </restrict> 
      <manifest> 
       <attribute name="Class-Path" value="." /> 
       <attribute name="Main-Class" value="my.package.ServerApplication" /> 
      </manifest> 
     </jar> 
    </target> 
</project> 

但是,當我嘗試推出使用

> java -jar ServerApplication.jar 

我得到一個錯誤

沒有合適的驅動程序中的應用找到jdbc:mysql:// localhost/db?user = root & password =

我估計這是因爲找不到jar裏面的com.mysql.jdbc包。爲什麼是這樣?當我將Class-Path設置爲.時,不應該該jar能夠找到該jar中的所有類?

我打開了一個反編譯的罐子,所有的類都是他們需要的是,在這裏看到:

Decompiled JAR

這是怎麼回事錯在這裏?我的清單看起來是這樣的:

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.3 
Created-By: 1.7.0_07-b10 (Oracle Corporation) 
Main-Class: my.package.ServerApplication 
Class-Path: . 
+0

可能重複的[Eclipse:如何建立一個可執行的jar與外部jar?](http://stackoverflow.com/questions/502960/eclipse-how-to-build-an-executable-jar-with-external -罐) – duffymo

回答

0

如果您希望將它們包含在由空格分隔的位置,則必須明確寫出罐子的名稱。否則,我會建議簡單的啓動你的罐子,並提供類路徑爲手動參數:

java -cp . -jar ServerApplication.jar 

See here for more information.

0

我想你應該避免設置CLASSPATH可言的,因爲你是在包裝尤伯杯罐子的一切 - 它應該工作。

0

也許你可以試試優秀的Eclipse插件是fatjar。它曾多次使用它來包含基於Java Swing的應用程序的所有依賴項。