【问题标题】:Maven : Getting issue while using MOJOMaven:使用 MOJO 时出现问题
【发布时间】:2020-08-03 12:40:56
【问题描述】:

我有一个框架,其中有多个类,其中一个类是 mojo 类,它从不同的类获取一些数据,然后将这些数据传递给其他类以执行。 第一次使用命令 mvn clean install 时会出现错误 - 找不到工件 com.io:MyDataProject:0.0.1-SNAPSHOT。然后我必须注释掉构建标记中的第二个插件部分,如下所示,然后再次使用命令 mvn clean install 然后安装我的插件,一旦安装,我将再次取消注释注释代码,以便我可以使用我安装的插件来执行 mojo,然后一切运行正常。

问题是如果我要与其他团队成员共享我的项目,他们必须执行我不想要的相同步骤。我需要使用 mvn clean install 来安装我的插件并同时执行我的 mojo 之类的东西。

    @Mojo(name = "dependency-counter", defaultPhase = LifecyclePhase.COMPILE)
    public class DependencyCounterMojo extends AbstractMojo {
        
            public void execute() throws MojoExecutionException, MojoFailureException {
                System.out.println("$$$$$$$$$$$$$$ ....Mojo execution begins.... $$$$$$$$$$$$$$");
                GenerateFeature ob=new GenerateFeature();
                ob.getData();
            }
        }

Pom.xml:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
</dependencies>
<build>
   <plugins>
      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.4</version>
        </plugin>
        <plugin>
            <groupId>com.io</groupId>
            <artifactId>MyDataProject</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <executions>
                <execution>
                    <goals>
                        <goal>dependency-counter</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <scope>test</scope>
            </configuration>
        </plugin>
    </plugins>
</build>

【问题讨论】:

  • 我理解正确吗:您正在尝试将插件添加到此插件的 POM 中?
  • 我有一个 maven 项目,在 src/main/java 下我有所有与框架相关的类 + mojo 类,只有一个 POM 文件,它只属于这个 maven 项目。
  • 您可以创建模块化项目,并首先将插件构建为模块,然后将您的项目构建为第二个模块

标签: java maven maven-3 maven-plugin maven-assembly-plugin


【解决方案1】:

您需要两个独立的项目或模块:

  • 一个用于插件,包含插件的 mojo 和 POM。
  • 一个用于您的框架,其中 POM 在 &lt;plugins&gt; 下列出了插件。

您不能在生成该插件的同一个 POM 中列出该插件。

您也可以考虑完全不将插件放入 POM 中,而是在命令行上运行它。

【讨论】:

  • 是的,我正在考虑按照您提到的步骤使用多模块方法,但我遇到的一个问题是我必须在 Mojo(Module1) 中调用一个函数,该函数存在于我的框架中的一个类中(模块 2)。但是当我在父模块中执行 mvn clean install 时,mojo 每次都会输出相同的结果。从 mojo 中的其他项目调用类是否有问题?
  • 不,没问题。确保使用版本 ${project.version} 定义正确的依赖项
  • 所以你试图先构建插件,但它依赖于包含框架的第二个模块,它尚未构建并在它的 pom 中引用插件,这是一种循环依赖,你能发布整个 pom 吗?
猜你喜欢
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 2014-05-09
  • 2014-02-27
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
相关资源
最近更新 更多