簡體   English   中英

螞蟻可運行罐子不起作用

[英]ant runnable jar not working

我使用ant創建了一個可運行的jar,但是它沒有運行。 當我運行罐子時,出現以下錯誤

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/teamdev/jxbrowser/events/NavigationListener
    at com.MainClass$2.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:682)
    at java.awt.EventQueue$3.run(EventQueue.java:680)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: java.lang.ClassNotFoundException: com.teamdev.jxbrowser.events.NavigationListener
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 15 more

但是當我使用eclipse創建jar時,這個jar工作得很好。 我用ant創建的jar清單如下

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_37-b06-434-11M3909 (Apple Inc.)
Main-Class: com.MainClass
Class-Path: ./ commons-cli.jar commons-codec-1.2.jar commons-httpclien
 t-3.0.1.jar commons-logging-1.1.1.jar ffmpeg-java.jar fmj.jar jdom.ja
 r logback-classic.jar logback-core.jar lti-civil-no_s_w_t.jar mail.ja
 r mp3spi1.9.4.jar slf4j-api.jar tritonus_share.jar vorbisspi1.0.2.jar
  xuggle-xuggler.jar comfyj-2.9.jar engine-gecko.jar engine-ie.jar eng
 ine-webkit.jar jniwrap-3.8.4 jxbrowser-3.3.jar jxbrowserdemo.jar log4
 j-1.2.15.jar MozillaInterfaces.jar runtime.jar slf4j-api-1.5.8.jar sl
 f4j-log4j12-1.5.8.jar winpack-3.8.3.jar xulrunner-mac.jar 

我用eclipse創建的罐子的清單如下

Manifest-Version: 1.0
Rsrc-Class-Path: ./ jniwrap-3.8.4.jar lti-civil-no_s_w_t.jar commons-h
 ttpclient-3.0.1.jar slf4j-log4j12-1.5.8.jar vorbisspi1.0.2.jar slf4j-
 api.jar ffmpeg-java.jar fmj.jar commons-codec-1.2.jar engine-ie.jar x
 ulrunner-mac.jar commons-logging-1.1.1.jar winpack-3.8.3.jar mp3spi1.
 9.4.jar tritonus_share.jar commons-cli.jar jdom.jar MozillaInterfaces
 .jar comfyj-2.9.jar jxbrowser-3.3.jar runtime.jar logback-classic.jar
  engine-gecko.jar mail.jar engine-webkit.jar log4j-1.2.15.jar jxbrows
 erdemo.jar slf4j-api-1.5.8.jar logback-core.jar xuggle-xuggler.jar
Class-Path: .
Rsrc-Main-Class: com.MainClass
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

兩者都是相同的,所有依賴項也都在創建的jar中,但是使用ant創建的jar仍然無法正常工作。
我知道您會建議我使用Eclipse創建jar,但是我想混淆我的代碼,這就是為什么我使用ant創建可運行jar的原因。

我猜您用Ant生成的jar文件沒有jar-in-jar-loader ,這就是為什么它無法在嵌入式jars中找到類的原因。

使用Eclipse生成JAR時,可以保存Ant腳本,然后將jar-in-jar-loader.zip文件添加到項目中。 然后使用生成的Ant文件創建您的JAR。 這種方法對我有用。

您的Ant腳本應如下所示:

    <jar destfile="C:\Users\\workspace\Your.jar">
        <manifest>
            <attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader"/>
            <attribute name="Rsrc-Main-Class" value="org.mypackage.MainClass"/>
            <attribute name="Class-Path" value="."/>
            <attribute name="Rsrc-Class-Path" value="./ libA.jar "/>
        </manifest>
        <zipfileset src="jar-in-jar-loader.zip"/>
        <fileset dir="${ProjectPath}/bin"/>
        <zipfileset dir="${ProjectPath}\lib" includes="libA.jar"/>
    </jar>

第一個zipfileset將包含jar-in-jar-loader.zip

fileset將添加您的所有類

第二個zipfileset將添加libA.jar作為嵌入式jar,並且在Rsrc-Class-Path應提及

使用您的Ant生成的清單,它將在主jar文件之外尋找庫jar文件,Eclipse使用一種特殊的Main-Class和class loader來獲取捆綁的依賴項。

您可能希望使用OneJar ant任務 (或類似的任務 )來實現與Eclipse相當的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM