2012-06-07 30 views
4

我試圖從我的eclipse創建一個jar,爲了能夠使用外部.jars,我在類路徑中使用了帶有多個.jars的清單:在類路徑中創建具有多個庫的自定義清單的jar

Manifest-Version: 1.0 
Sealed: true 
Main-Class: src.BatchTester 
Class-Path: . P:/Tools/xstream/1.4.2/lib/kxml2-2.3.0.jar P:/Tools/xstream/1.4.2/lib/xstream-1.4.2.jar P:/Tools/StringTemplate/4.0.5/lib/antlr-3.3-complete.jar P:/Tools/StringTemplate/4.0.5/lib/ST-4.0.5.jar P:/Tools/Jdbc/lib/sqljdbc4.jar 

顯然,如果我不把這些庫在classpath中出現以下錯誤:

java.lang.NoClassDefFoundError: com/thoughtworks/xstream/XStream 

但是,當我把它們放在類路徑中的錯誤更改:

java.lang.NoClassDefFoundError: src/BatchTester 

因此,它似乎無法找到我的主類。我在類路徑中嘗試了幾種可能性,例如向類路徑中添加或刪除.,但無法使其工作。

任何想法,我該如何解決這個???

感謝您的時間和精力,


PS:在清單中創建的.jar類路徑后里面的樣子:

Class-Path: . P:/Tools/xstream/1.4.2/lib/kxml2-2.3.0.jar P:/Tools/xstr 
eam/1.4.2/lib/xstream-1.4.2.jar P:/Tools/StringTemplate/4.0.5/lib/ant 
lr-3.3-complete.jar P:/Tools/StringTemplate/4.0.5/lib/ST-4.0.5.jar P: 
/Tools/Jdbc/lib/sqljdbc4.jar 

新線條和空間,但即使經過將其改爲「正確」格式,我也遇到了同樣的問題。

PS2:我知道,與像脂肪-JAR一些插件,你可以讓它工作,但我不希望插入更多的數據比需要在我的.jar

+0

如果你有包含你BatchTester.class你罐子的根文件夾「SRC」你檢查? – brimborium

+0

顯然我的班級在那裏... 否則,當沒有定義類路徑時,我不會有其他錯誤。 – magodiez

+0

啊,現在我看到你的問題。 'Main-Class:BatchTester'和'Class-Path:src P:/ Too ...'怎麼樣?或者是你的BatchTester實際上在一個包「src」中(這很奇怪)? – brimborium

回答

6

最後我複製所有的庫進入/ lib文件夾並將它們添加到.jar文件中,因爲它似乎對IT人員來說是好的(因爲它是一個小應用程序)。

這裏是螞蟻(如果是有用的人):

<?xml version="1.0" encoding="UTF-8"?> 
<project name="BatchTester" default="compile" basedir="."> 
    <property name="external" value="lib/external-libs.jar"/> 
    <target name="compile"> 
     <javac srcdir="jav" 
       source="1.6" 
     /> 
     <echo>Creating jar File</echo> 
     <!--create a new .jar with all the external jars in /lib--> 
     <jar jarfile="${external}"> 
      <zipgroupfileset dir="lib/"> 
       <include name="**/*.jar"/> 
      </zipgroupfileset> 
     </jar> 
     <!--<sleep seconds="1"/>--> 
     <!--create .jar file--> 
     <jar jarfile="BatchTester.jar" index="true" filesetmanifest="mergewithoutmain"> 
      <fileset dir="."> 
       <include name="**/jav/**/*.class"/> 
       <exclude name="**/jav/**/*.java"/> 
      </fileset> 
      <zipfileset src="${external}"> 
       <exclude name="META-INF/*.SF"/> 
      </zipfileset> 
      <manifest> 
       <attribute name="Main-Class" value="jav.BatchTester"/> 
      </manifest> 
     </jar> 
     <!--delete previously created extern .jar--> 
     <delete file="${external}"/> 
    </target> 
</project> 
+0

非常感謝你!我花了幾個小時在這個問題上試圖添加多個罐子在清單中的類路徑,但這個zipfileset的解決方案完美無缺,速度如此之快!!!!!!! – Jan

+0

如果我可以不止+1次,我肯定會這樣做。 – Jan

2

很抱歉,如果我的問題給你聽起來很明顯。


* 啓動命令*

爲了排除任何懷疑,你不是試圖用這種命令啓動你的罐子?

java -jar myJar.jar -cp ./lib 

如果您使用classpath選項,您可能沒有;)。選項--classpath(或-cp)和-jar不能一起使用。

也希望使用相對路徑,比如./lib而不是P:/ Tools/...但是,無論如何,這並不能解決您的問題。


* 包位置*

正如brimborium說,什麼是真正的你包? src聽起來很奇怪。我們懷疑這個錯誤。

在你的BatchTester類中,你爲包指令編寫了什麼?什麼都沒有(即不推薦的默認包?)?

難道你類(擺脫掉評論)開始

public class BatchTester { 

在這種情況下,可以肯定,SRC不應mentionned。

這裏是一個適用於我的清單示例。

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Created-By: Apache Maven 
Built-By: jrRevy 
Build-Jdk: 1.6.0_31 
Main-Class: com.sopragroup.training.dojo1.MainSwingApp 
Class-Path: dojo1-0.5.0-SNAPSHOT-lib/spring-core-3.1.1.RELEASE.jar doj 
o1-0.5.0-SNAPSHOT-lib/spring-asm-3.1.1.RELEASE.jar [blablabla] 

具有以下執行結構

/ 
| 
+ --dojo1-0.5.0-SNAPSHOT.jar 
| 
+ --dojo1-0.5.0-SNAPSHOT-lib/ 
    | 
    + --spring-core-3.1.1.RELEASE.jar 

很顯然,我使用maven爲建立自己的應用程序,但主要的想法是英寸

相關問題