Java mvn安装后,我尝试运行main,但在ConfigurationException中出现NoClassDefFoundError

Java mvn安装后,我尝试运行main,但在ConfigurationException中出现NoClassDefFoundError,java,exception,maven-2,main,apache-commons-config,Java,Exception,Maven 2,Main,Apache Commons Config,我创建了一个maven项目,我已经写了几个星期的应用程序,并希望在最后运行它。。。但我不能 在执行我的.jar时,我得到以下stacktrace: C:\Users\MyUser\.m2\repository\com\myCompany\MyApp\ 0.0.1-SNAPSHOT> java -Dconfigfile=config.xml -jar MyApp-0.0.1-SNAPSHOT.jar Exception in thread "main" java.lang.NoClassDe

我创建了一个maven项目,我已经写了几个星期的应用程序,并希望在最后运行它。。。但我不能

在执行我的.jar时,我得到以下stacktrace:

C:\Users\MyUser\.m2\repository\com\myCompany\MyApp\
0.0.1-SNAPSHOT> java -Dconfigfile=config.xml -jar MyApp-0.0.1-SNAPSHOT.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/configuration/ConfigurationException
        at com.mycompany.connector.DBConnector.reloadDBSettings(DBConnector.java:23)
        at com.mycompany.connector.DBConnector.<clinit>(DBConnector.java:16)
        at com.mycompany.connector.DBConnectorFactory.createDBConnector(DBConnectorFactory.java:17)
        at com.mycompany.service.MyAppService.<clinit>(MyAppService.java:38)
        at com.mycompany.main.MyAppMain.init(MyAppMain.java:13)
        at com.mycompany.main.MyAppMain.main(MyAppMain.java:8)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.configuration.ConfigurationException
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 6 more
java.lang.ClassNotFoundException表示shell中的$CLASSPATH变量中没有org.apache.commons.configuration.ConfigurationException,在命令行上运行java命令与通过Maven运行/编译不同。

使用。Maven将在类路径上包含所有必要的类

在pom.xml中的下添加配置:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
   <configuration>
      <arguments>
        <argument>-Dconfigfile=config.xml</argument>
      </arguments>
      <mainClass>com.tele2.main.MyAppMain</mainClass>
    </configuration>
</plugin>
通过mvn exec运行:java

ClassNotFoundException意味着JVM无法在类路径中找到该类。这与NoClassDefFoundError不同,NoClassDefFoundError意味着找不到该类使用的类,而不是该类本身

有两种方法可以解决此问题:

将所有依赖jar文件添加到文件夹中,将其添加到JVM类路径中,然后使用以下命令运行主类:

java-cp.\dependency\*;MyApp-0.0.1-SNAPSHOT.jar.jar com.myCompany.MyApp.Main

为了将所有依赖项放入一个文件夹中,您可以使用maven dependencies插件

使用maven汇编插件。这个插件将把所有依赖的jar文件捆绑到一个Single jar文件中,这样您就可以以相同的方式执行它。但是,有时这种方法并不适用于使用大量库的大型应用程序。JAR可能会相互冲突,因此您可能需要自己解决依赖关系,或者使用maven插件为您解决依赖关系


注意:Tattletale在第一种情况下也可以很好地解决冲突。

我可以在POM中设置它吗?或者我需要做什么。mvn安装后在哪里可以找到该类?
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
   <configuration>
      <arguments>
        <argument>-Dconfigfile=config.xml</argument>
      </arguments>
      <mainClass>com.tele2.main.MyAppMain</mainClass>
    </configuration>
</plugin>