【问题标题】:Maven: execute antrun task during packageMaven:打包期间执行antrun任务
【发布时间】:2012-12-07 06:28:33
【问题描述】:

我需要使用 Maven antrun 插件将 Hibernate 字节码检测添加到我的 Java 类之一,以启用各个字段的延迟加载。但是,我无法让插件在构建周期中执行。

mvn package 构建期间,如何在编译后打包之前指示 Maven 执行 antrun 插件?

当前 pom.xml (sn-p):

<pluginManagement>
    <plugins>
    ...
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <inherited>false</inherited>
            <executions>
                <execution>
                    <id>default-cli</id>
                    <configuration>
                        <target>
                            <echo message="Running instrumentation task"/>
                            <taskdef name="instrument" classname="org.hibernate.tool.instrument.javassist.InstrumentTask">
                                <classpath>
                                    <path refid="maven.dependency.classpath" />
                                    <path refid="maven.plugin.classpath" />
                                </classpath>
                            </taskdef>
                            <instrument verbose="true">
                                <fileset dir="target/classes">
                                    <include name="**/UploadedFile.class" />
                                </fileset>
                            </instrument>
                        </target>
                    </configuration>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-core</artifactId>
                    <version>${hibernate.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.javassist</groupId>
                    <artifactId>javassist</artifactId>
                    <version>${javassist.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-simple</artifactId>
                    <version>${org.slf4j-version}</version>
                </dependency>
            </dependencies>
        </plugin>
    ...
    </plugins>
</pluginManagement>

我看到的有关此问题的所有文档都显示该插件被配置为在“进程类”阶段运行。但是,从 Maven docs 来看,“进程类”阶段似乎不是 package 构建周期的一部分。我可以使用mvn antrun:run 自行运行该插件,但由于最后我需要执行mvn package 来生成一个用于部署的.war 文件,我相当确定该插件需要在包任务中的某处执行为了将修改后的类放入打包的 .war 中。

我已经尝试了上述代码的许多变体(更改相位、更改 with 、更新插件版本、更改 id 等),但没有明显的变化。我一直在运行mvn-e -X 以显示所有可能的输出,无论我尝试什么,antrun 插件都不会执行。任何帮助将不胜感激。

【问题讨论】:

  • 此配置位于哪个部分(pluginspluginManagement)?
  • 它在pluginManagement。我会将它添加到帖子中的 pom sn-p 中。
  • 就是这个原因。它永远不会被执行。请参阅我的回答 here 以了解这些部分之间的区别。你应该把它移到&lt;build&gt; -&gt; &lt;plugins&gt;
  • 有趣,感谢您的解释。我最初在 &lt;plugins&gt; 中没有外部 &lt;pluginManagement&gt; 标记,但我的 IDE 抱怨(Eclipse,“生命周期配置未涵盖插件执行”),我找到了另一个答案(我丢失了链接)表明问题将通过添加pluginManagement 外部标签来解决。我刚刚尝试在删除标签后从命令行运行mvn package,并且正确执行了任务。我的 IDE 仍然在抱怨,但只要它可以工作就可以了。谢谢!如果您留下答案,我会将其标记为正确。
  • 不客气 =) 我发布了答案。

标签: java hibernate maven maven-antrun-plugin


【解决方案1】:

显然,问题在于您的antrun 插件配置位于pluginManagement 部分而不是plugins 部分。您可以在我的回答 here 中看到这两个部分之间的区别。

要使其正常工作,您应该将其移至 pom.xml 的 &lt;build&gt; -&gt; &lt;plugins&gt; 部分。

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多