2015-12-22 116 views
4

Eclipse有3個可運行的JAR導出方法。其中一個在我的情況下不起作用。我想停止使用生成庫子文件夾並切換到單個JAR的導出方法。Eclipse Jar-in-Jar無法找到joda.time類

在任何情況下我的調用是在腳本中,有幾個腳本變量,如$ MEMORYOPTIONS

java $MEMORYOPTIONS -enableassertions -classpath VARIOUS-SHOWN-BELOW topLevelDomain.domain.packageName.className $1 $2 $3

首先...

我有以下導出方法和成功類路徑如圖所示。

export > runnable jar > extract required libraries

-classpath /home/user/workspace/project/project1.jar

我有不想用這個單一JAR的一個原因。 (這是因爲包裝的第三方軟件包暴露重名的文件,所以我招人煩的警告,例如:所謂的License.txt文件是在幾個包。)

其次...

前面已經提到我也如下所示,使用以下「庫子文件夾」導出方法和類路徑取得成功。

export > runnable jar > copy required libraries into a sub-folder

-classpath /home/user/workspace/project/project1.jar:/home/user/workspace/project/project1_lib/*

(編輯:事實證明該JAR具有指向project1_lib子文件夾,以便在類路徑可以被簡化,省略了一個清單冒號後只刪除部分(:)分離器類路徑。)

第三...

我解釋 「包所需的庫」 是指一個JAR-在-JAR出口。用所示的類路徑調用此導出會導致無法找到該類。

export > runnable jar > package required libraries

-classpath /home/user/workspace/project/project1.jar

的錯誤是:

Exception in thread "main" java.lang.NoClassDefFoundError: org/joda/time/ReadablePartial

如何獲得這種特殊類型的Eclipse出口的工作?我已經卸載Eclipse(火星)並重新安裝。我也 刪除了org.joda.time包並添加回來。問題依然存在。

回答

1

您是否考慮過創建一個超級罐子

隨着行家你只需要添加下面的插件定義和使用命令MVN包

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-shade-plugin</artifactId> 
<version>2.4.2</version> 
<executions> 
    <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 

      <filters> 
       <filter> 
        <artifact>joda-time:joda-time</artifact> 
        <includes> 
         <include>**</include> 
        </includes> 
       </filter> 
       <filter> 
        <artifact>*:*</artifact> 
        <excludes> 
         <exclude>META-INF/*.SF</exclude> 
         <exclude>META-INF/*.DSA</exclude> 
         <exclude>META-INF/*.RSA</exclude> 
        </excludes> 
       </filter> 
      </filters> 
     </configuration> 
    </execution> 
</executions> 
</plugin> 

希望這有助於。

+0

我會考慮使用加載項,當所有其他的失敗。 – H2ONaCl

0

你需要與你的類調用捆綁JarRsrcLoader作爲參數:

java $MEMORYOPTIONS -enableassertions 
-classpath /home/user/workspace/project/project1.jar 
org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader 
topLevelDomain.domain.packageName.className 

然而,這並不讓你來傳遞參數($1 $2 $3)的調用的類。

-1

您應該使用java-jar選項啓動您的應用程序。這樣的事情:

java $MEMORYOPTIONS -enableassertions -jar /path/to/project1.jar $1 $2 $3