2015-12-22 114 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