我正在使用 Maven exec 插件从命令行使用命令 mvn exec:java 运行 java 应用程序。我已经在 pom.xml 中指定了主类和关联的依赖项。
<groupId>com.example.MyApp</groupId>
<artifactId>MyApp</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.example.myclass</mainClass>
<arguments>
<argument>configFile</argument>
<argument>properties</argument>
</arguments>
</configuration>
</plugin>
我还指定了一些依赖项...
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.example.MyLibrary</groupId>
<artifactId>MyLibrary</artifactId>
<version>1.0.0</version>
</dependency>
MyApp
程序读取作为命令行参数传入的配置文件。配置文件包含位于 MyLibrary
中的类的名称。所以该类可以是 com.mypackage.driver.MyClass
,它位于 MyLibrary
中,它是上面列出的 MyApp
jar 的依赖项。
但是,当我尝试运行它时,我得到一个 ClassNotFoundException
...
更新----
我正在使用系统类加载器加载在 MyApp
程序的命令行中传入的类
ClassLoader loader = ClassLoader.getSystemClassLoader();
我认为这是导致问题的原因,因为它正在寻找默认类路径中不包含依赖项的类。
关于我在这里做错了什么的任何提示?
最佳答案
您还在寻找这个问题的答案吗?我遇到了完全相同的问题,终于弄明白了。
您需要将 includePluginDependencies 添加到您的配置中,以使插件在您的依赖项中搜索主类:
<configuration>
<includePluginDependencies>true</includePluginDependencies>
<mainClass>com.example.myclass</mainClass>
<arguments>
<argument>configFile</argument>
<argument>properties</argument>
</arguments>
</configuration>
参见此处:http://mojo.codehaus.org/exec-maven-plugin/java-mojo.html#includePluginDependencies
关于java - Maven 执行插件 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20705914/