3

我有这个多模块项目。

在每个构建开始时,我想运行一些 bat 文件。

所以我做了以下事情:

<profile>
            <id>deploy-db</id>
            <build>
                <plugins>
 <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.1.1</version>
        </plugin>
                </plugins>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>exec-maven-plugin</artifactId>
                            <version>1.1.1</version>
                            <executions>
                                <execution>
                                    <phase>validate</phase>
                                    <goals>
                                        <goal>exec</goal>
                                    </goals>
                                    <inherited>false</inherited>
                                </execution>
                            </executions>
                            <configuration>
                                <executable>../database/schemas/import_databases.bat</executable>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>

当我mvn verify -Pdeploy-db从根目录运行时,我会在每个模块中一遍又一遍地执行这个脚本。

我希望它只在根模块中执行一次。

我错过了什么?

谢谢

4

2 回答 2

1

我可能弄错了,但是当您将插件添加到该<pluginManagement>部分时,每个子模块都会继承它并“运行”它。

我认为您应该将您的 exec-maven-plugin 及其<execution>移至正常<plugins>部分。

于 2010-03-28T12:43:26.490 回答
0

所以你遇到的问题是你试图在父 POM中做一些事情。这不是在 maven 中设计父 pom 的方式(即不是“maven 方式”)。您应该只在“叶节点”pom 中执行操作,父母只是为了聚合和放置应该在每个孩子中重用的共享行为。

因此,如何调用脚本的简单答案是分析您的孩子之间的依赖关系以确定哪些需要首先发生(并在必要时施加依赖以强制执行此操作),然后将插件添加到该孩子。如果由于某种原因它不适合那个孩子,你可以让另一个孩子只执行这个动作。

在旁注中,永远不要在 Maven 中引用相对文件路径。您正在使用“../database/schemas/import_databases.bat”。如果 import_databases.bat 不在项目目录中,那么假设它在父目录中是要求一团糟。您应该改用“${basedir}/src/main/scripts/import_databases.bat”之类的东西

于 2014-05-22T14:25:55.307 回答