在构建期间忽略maven插件

时间:2014-01-07 19:46:27

标签: maven maven-plugin

如何在构建或部署期间忽略我的插件(maven-antrun-plugin)?

我正在从IDL工具生成源文件(用C语言编写)。我使用maven-antrun-plugin来生成源代码并将其应用到generate-sources阶段。与build-helper-maven-plugin一起,IDL工具生成的java源存放在生成的sources文件夹中,最终作为源包含在jar包中。完美!

这是我在maven构建中使用的内容:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <tasks>
                            <mkdir dir="target/generated-sources/" />
                            <!-- other task stuff here -->
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <id>add-source</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>target/generated-sources/gen-java</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

但是,现在问题是我们的团队被指示不在我们的持续集成(CI)环境中使用IDL工具;由于未安装IDL工具,插件将在CI中失败。因此,我必须将生成的源(使用src / main / java下的其他代码)签入我们的GIT仓库。

我希望能够仍然运行maven-antrun-plugin,但是将其与generated-sources阶段或任何生命周期分离,以便CI环境可以运行我的构建。我在进行更改时手动/本地运行插件,以便生成源,然后检入GIT仓库。

这甚至可能吗?如何在构建或部署期间忽略 maven-antrun-plugin

2 个答案:

答案 0 :(得分:2)

根据评论者(Jarrod Roberson)的建议,maven 个人资料可用于忽略maven-antrun-plugin插件中的资源生成。

具体而言,添加下面显示的profiles块可解决此问题。 default-profile个人资料默认情况下已激活;它不包含maven-antrun-plugin块。 但是,generate-source-profile确实包含将启动源生成的maven-antrun-plugin

<profiles>

    <profile>
        <id>default-profile</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

    <profile>
        <id>generate-sources-profile</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>generate-sources</id>
                            <phase>generate-sources</phase>
                            <configuration>
                                <tasks>
                                    <mkdir dir="target/generated-sources/" />
                                    <!-- other task stuff here -->
                                </tasks>
                            </configuration>
                            <goals>
                                <goal>run</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

</profiles>

因此,持续集成(CI)工具将执行正常构建和部署(mvn deploy)。当我想生成源代码时,我会通过执行mvn clean install -P generate-sources-profile来运行生成源配置文件。

答案 1 :(得分:0)

您可以使用profiles或只是跳过maven-antrun-plugin执行

skip - 指定是否应跳过Antrun执行。

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <skip>${skipAntRunForMe}</skip>
                <tasks>
                    <mkdir dir="target/generated-sources/"/>
                    <!-- other task stuff here -->
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

使用param进行inovke目标-DskipAntRunForMe