当前位置: 首页 > 知识库问答 >
问题:

Maven exec插件类NotFoundException

苏雅珺
2023-03-14

我正在使用Maven exec插件从命令行运行一个java应用程序,命令是mvn exec: 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。我的包裹。驾驶员MyClass位于MyLibrary中,它是上面列出的MyAppjar的依赖项。但是,当我尝试运行此程序时,会得到一个ClassNotFoundException。。。

更新----我正在使用系统类加载器加载在MyApp程序的命令行上传递的类

ClassLoader loader = ClassLoader.getSystemClassLoader();

我认为这是造成问题的原因,因为它在默认类路径上查找不包含依赖项的类。

有没有关于我做错了什么的线索?

共有3个答案

柯书
2023-03-14

您可以按如下方式生成类路径:

    <configuration>
      <executable>java</executable>
      <arguments>
        <argument>-Dmyproperty=myvalue</argument>
        <argument>-classpath</argument>
        <!-- automatically creates the classpath using all project dependencies,
             also adding the project build directory -->
        <classpath/>
        <argument>com.example.Main</argument>
        ...
      </arguments>
    </configuration>
安承教
2023-03-14

您需要添加依赖项作为执行插件的依赖项,这样执行插件就可以加载您配置的类com.example.myclass

<plugins>
 <plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>exec-maven-plugin</artifactId>
   <version>1.2.1</version>
   [...]
   <dependencies>
     <dependency>
       <groupId>com.example.MyLibrary</groupId>
       <artifactId>MyLibrary</artifactId>
       <version>1.0.0</version>
       <type>jar</type>
     </dependency>

 </plugin>
仲高超
2023-03-14

你还在寻找这个问题的答案吗?我也遇到了同样的问题,最后终于解决了。

您需要将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

 类似资料:
  • 可以为节点组添加预定义类型,从而可以轻松控制每个组的嵌套规则和图标。 $.jstree.defaults.typestypes plugin 一个将所有类型存储为键值对的对象,其中键是类型名称,值是可以包含以下键的对象(所有可选)。 max_children 一个将所有类型存储为键值对的对象,其中键是类型名称,值是可以包含以下键的对象(所有可选)。 -1为无限制。 max_depth 此节点类型可

  • 插件目录在程序根目录public/plugins 插件命名规范 插件类名采用大驼峰命名法,都带 Plugin类名后缀,如 DemoPlugin,CustomAdminLoginPlugin 插件目录名应该把插件类名转化为小写下划线形式的,如 demo,custom_admin_login 插件类主文件位于插件根目录 命名格式:插件名+Plugin.php 在插件根目录创建DemoPlugin.ph

  • 插件类主文件 文件位于插件根目录 命名格式:插件名+Plugin.class.php <?php // +---------------------------------------------------------------------- // | ThinkCMF [ WE CAN DO IT MORE SIMPLE ] // +-----------------------------

  • 插件目录在程序根目录public/plugins 插件命名规范 插件类名采用大驼峰命名法,都带 Plugin类名后缀,如 DemoPlugin,CustomAdminLoginPlugin 插件目录名应该把插件类名转化为小写下划线形式的,如 demo,custom_admin_login 插件类主文件位于插件根目录 命名格式:插件名+Plugin.php 在插件根目录创建DemoPlugin.ph

  • 地图类型切换插件,用来切换固定的几个常用图层 示例 <vuep template="#example"></vuep> <script v-pre type="text/x-template" id="example"> <template> <div class="amap-page-container"> <el-amap vid="amap" :plugin="p

  • cmf_get_plugin_class($name) 功能 获取插件类的类名 参数 $name: string 插件名,大驼峰命名规则,不带Plugin后缀 返回 string 插件类的类名,如:plugins\demo\DempPlugin