java - Maven 执行插件 ClassNotFoundException

标签 java maven

我正在使用 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/

相关文章:

java - Selenium WebDriver "java",我无法单击页脚上的按钮

java - 警报对话框未显示

java - 尝试运行我的代码以列出可用接口(interface)时出现 Pcap4J 错误 :java. lang.ClassNotFoundException : org. pcap4j.util.NifSelector

javascript - 在 Kotlin-js 项目中将 index.html 放在哪里?

java - mvn install 查找在我的 java 目录中嵌套太深的 tools.jar

java - 如何将字符串数组列表转换为对象列表

java - 如果用户未登录struts2,如何防止加载任何页面

java - 浏览器关闭时关闭程序

java - 使用 Maven 单独执行测试

java - 无法为目标 'exec-war-only' 更改 tomcat7-maven-plugin 的 mainClass