Maven配置文件 - 如何为父级运行一次插件,为模块运行更多?

时间:2016-03-25 08:15:08

标签: maven plugins module profile

我对詹金斯的输出感到有些困惑。

詹金斯的工作:(底部缩短了pom.xml)

sol$value

我的所有插件都会运行4次:

  • 父/ pom.xml的
  • 父/模块1 / pom.xml的
  • 父/模块2 / pom.xml的
  • 父/单词数/ pom.xml的

我需要:

  • first-maven-plugin :仅在父pom.xml中运行一次
  • second-maven-plugin :为每个 pom.xml运行

为什么:

  • first-maven-plugin:将在阶段中运行:initialize - >相当长的清理操作。不想要这4次
  • second-maven-plugin:将分阶段运行:package - >所有pom的必要条件。

父pom.xml

mvn deploy -Pprofile1

2 个答案:

答案 0 :(得分:1)

首先,如果您在父项中定义一个继承给所有子项的插件,而不是它完全按照您的意愿行事,这意味着它在每个pom上执行(或者每个模块上的其他单词,如果它是孩子与否)。

你的插件的问题是他们处理不太好的用例。因为你说第一个first-maven-plugin应该只在根级别运行(除此之外我不明白你的意思是清理操作...删除目标文件夹?)

第二个插件second-maven-plugin应该适用于所有pom?哪个不是很准确因为你的意思是pom所有包装pom的儿童模块?但我认为你的意思是所有有包装jar的儿童?

除上述内容外,我不确定您的个人资料的使用是否仅基于缺乏处理用例的正确性。

上面的结果我得出结论,你需要改变你的插件的实现。

如果您希望只在这样的多模块结构的根级别上运行插件,则可以在插件中以非常简单的方式处理:

public void execute()
    throws MojoExecutionException, MojoFailureException
{

    if (mavenProject.isExecutionRoot()) {

    } else {

    }

 ..

通过使用上面的插件,您的插件可以决定它是否在根级别上运行。

因此,您的first-maven-plugin可以使用以下内容:

public void execute()
    throws MojoExecutionException, MojoFailureException
{

    if (!mavenProject.isExecutionRoot()) {
       getLog().info("Not running at root level");
       return;  
    } 
    // here the time consuming operations        
 ..

你的second-maven-plugin做了对话:

public void execute()
    throws MojoExecutionException, MojoFailureException
{

    if (mavenProject.isExecutionRoot()) {
       getLog().info("Not running at root level");
       return;  
    } 
    // here the operation on the childs.
 ..

可以通过以下方式改善行为:

public void execute()
    throws MojoExecutionException, MojoFailureException
{

    if (!mavenProject.isExecutionRoot()) {
       getLog().debug("Not running at root level");
       return;  
    } 

    if ("pom".equals(project.getPackaging())) {
        getLog().debug("Ignoring pom packaging.");
        return;
    }
    // ..now the operations you would like to do...

因此,如果您有多个级别的模块层次结构,则可以忽略pom包装部件或其他部件等。

最后但并非最不重要。你的插件存档了什么?

答案 1 :(得分:0)

您可以在第一个插件配置中使用<inherited>false<inherited>,为我工作:

            <build>
            <plugins>
                <plugin>
                    <groupId>com.test.plugin</groupId>
                    <artifactId>first-maven-plugin</artifactId>
                    <version>1.0.0-SNAPSHOT</version>
                    <inherited>false<inherited>
                    <execution>
                        <id>execution1</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>doit</goal>
                        </goals>
                    </execution>
                </plugin>
                <plugin>
                    <groupId>com.test.plugin2</groupId>
                    <artifactId>second-maven-plugin</artifactId>
                    <version>1.0.0-SNAPSHOT</version>
                    <execution>
                        <id>another</id>
                        <phase>package</phase>
                        <goals>
                            <goal>goforit</goal>
                        </goals>
                    </execution>
                </plugin>
            </plugins>
        </build>

请参阅https://stackoverflow.com/a/1671175