【发布时间】:2014-05-04 18:42:39
【问题描述】:
嗨,我有一个 maven 项目使用了三个库:junit、commons-lang、org.apache.commons 我的程序位于位置 pl.parser.example.MainClass(使用 main 方法)和其他三个:Currency.java、CurrencyPojo.java、CurrencyRates.java
我的主要方法:
public static void main(String[] args){
try {
String type = "c";
String currencyCode = args[0];
String inputStartDate = args[1];
String inputEndDate = args[2];
...
我无法从命令行运行这个程序,我用 maven 构建它到 jar 文件并尝试:
java -cp AreYouExample.jar pl.parser.example.MainClass EUR 2013-01-28 2013-01-31
但我遇到了异常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/ma
th3/stat/descriptive/DescriptiveStatistics
at pl.parser.example.CurrencyRates.obtainAvgPurchaseRate(
CurrencyRates.java:33)
at pl.parser.example.MainClass.main(MainClass.java:34)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.math3.stat.descr
iptive.DescriptiveStatistics
at java.net.URLClassLoader$1.run(Unknown Source)...
我认为跑步者看不到我在程序中使用的库(从数学中获取平均数)
我没有清单文件和类路径文件。当我尝试运行 jar 时:
...> java MainClass EUR 2013-01-28 2013-01-31
然后我得到了异常:
Error: Could not find or load main class MainClass.java
但是当我将使用 MainClass.java 转到文件夹并运行 javaC MainClass.java... 然后编译器无法找到程序中使用的符号,因为 sumbols 位于其他类中(在此文件夹/包中)
我认为我应该插入一个主类,我在堆栈溢出中建议这种情况,build in pom file 但这不起作用。
编辑: 现在它可以工作了,我在 POM 文件中进行了更改,例如 other overstackflow topic 我插入此代码:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>your.main.Class</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
【问题讨论】: