Java Jar中的Eclipse Jar无法找到joda.time类
Eclipse有3个可运行的JAR导出方法。其中一个对我来说不起作用。我想停止使用导出方法,该方法生成库子文件夹并切换到单个JAR 在所有情况下,我的调用都是在脚本中进行的,带有一些脚本变量,例如$MEMORYOPTIONSJava Jar中的Eclipse Jar无法找到joda.time类,java,eclipse,jar,Java,Eclipse,Jar,Eclipse有3个可运行的JAR导出方法。其中一个对我来说不起作用。我想停止使用导出方法,该方法生成库子文件夹并切换到单个JAR 在所有情况下,我的调用都是在脚本中进行的,带有一些脚本变量,例如$MEMORYOPTIONS java$memoryooptions-enableassertions-classpath-variable-show-down-topLevelDomain.domain.packageName.className$1$2$3 首先 我成功地使用了下面的导出方法和类路径
java$memoryooptions-enableassertions-classpath-variable-show-down-topLevelDomain.domain.packageName.className$1$2$3
首先
我成功地使用了下面的导出方法和类路径,如图所示
export>runnable jar>提取所需库
-classpath/home/user/workspace/project/project1.jar
我有理由不想用这个罐子。(这是因为未打包的第三方软件包暴露了具有重复名称的文件,因此我收到了恼人的警告。例如:一个名为License.txt的文件位于多个软件包中。)
其次
如前所述,我还成功地使用了以下“库子文件夹”导出方法和类路径,如图所示
export>runnable jar>将所需库复制到子文件夹中
-classpath/home/user/workspace/project/project1.jar:/home/user/workspace/project/project1\u lib/*
(编辑:由于JAR有一个指向project1_lib子文件夹的清单,因此可以简化类路径以忽略该子文件夹。只需从类路径中删除冒号(:)分隔符后的部分。)
第三
我将“PackageRequiredLibraries”解释为JAR-in-JAR导出。使用显示的类路径调用,此导出将导致查找该类失败
export>runnable jar>包所需库
-classpath/home/user/workspace/project/project1.jar
错误是:
线程“main”java.lang.NoClassDefFoundError中的异常:org/joda/time/ReadablePartial
如何使这种特定类型的Eclipse导出工作?我已经卸载并重新安装了Eclipse(Mars)。我也有
删除了
org.joda.time
包并将其重新添加。问题依然存在 > P>你是否考虑创建一个强的Uber jar < /强>?/P>
使用maven只需添加以下插件定义并使用命令mvn-package
<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>
org.apache.maven.plugins
maven阴影插件
2.4.2
包裹
阴凉处
乔达时间:乔达时间
**
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
希望这有帮助。您需要使用类作为参数调用绑定的
jarsrcloader
:
java $MEMORYOPTIONS -enableassertions
-classpath /home/user/workspace/project/project1.jar
org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
topLevelDomain.domain.packageName.className
但是,这不允许您将参数(
$1$2$3
)传递给被调用的类。您应该使用java
的-jar
选项启动应用程序。大概是这样的:
java $MEMORYOPTIONS -enableassertions -jar /path/to/project1.jar $1 $2 $3
当所有其他的都失败时,我会考虑使用外接程序。