在打包之前在Maven中执行任务

时间:2013-06-06 13:49:22

标签: eclipse maven maven-3

我不知道如何在打包之前在Maven中运行任务。

<build>
    <plugins>
        [...]
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <configuration>
                        <tasks>
                            <echo message="****** TEST *****" />
                        </tasks>
                    </configuration>
                </execution>
            </executions>
        </plugin>

当我运行mvn clean package时,它不会被执行。我该如何执行此任务?我正在使用maven 3.0.5,如果重要的话。

**更新:**

按照建议添加idgoal,从命令行解决了问题。

<id>my-generate-sources</id>
<goals>
    <goal>run</goal>
</goals>

为修复Eclipse错误,我在构建部分中配置了lifecyleMappingMetadata:

<build>
...
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.apache.maven.plugins</groupId>
                                    <artifactId>maven-antrun-plugin</artifactId>
                                    <versionRange>[1.7,)</versionRange>
                                    <goals>
                                        <goal>run</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <execute />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

2 个答案:

答案 0 :(得分:5)

您需要添加<goals>标记(并且强烈建议添加<id>标记,但如果插件只有一个<execution>则不需要,例如

      ...
      <execution>
        <id>print-something</id>
        <phase>generate-sources</phase>
        <goals>
          <goal>run</goal>
        </goals>
        <configuration>
          <tasks>
            <echo message="****** TEST *****" />
          </tasks>
        </configuration>
      </execution>
      ...

答案 1 :(得分:2)

尝试添加执行ID:

<execution>
     <phase>generate-sources</phase>
     <id>my-generate-sources</id>
     <configuration>
         <tasks>
            <echo message="****** TEST *****" />
        </tasks>
    </configuration>
    <goals>
      <goal>run</goal>
    </goals>
</execution>

<强>更新

我忘了跑步目标,正如吉拉姆所说。 Eclipse maven集成是我见过的最糟糕的事情之一。我们运行它的方式是通过maven命令行exclusivley,这就是我建议的。你仍然可以像这样从eclipse运行它:

  • 创建一个新的空项目
  • 在其中创建mvn-clean-package.launch文件

该文件应如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
        <stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${resource}"/>
        <listAttribute key="org.eclipse.debug.ui.favoriteGroups">
        <listEntry value="org.eclipse.ui.externaltools.launchGroup"/>
        </listAttribute>
        <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LAUNCH_CONFIGURATION_BUILD_SCOPE" value="${none}"/>
        <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="/usr/bin/mvn"/>
        <stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="clean package -DskipTests=true -U"/>
        <stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${selected_resource_loc}"/>
   </launchConfiguration>

只要在您的工作区中打开此项目,您就可以选择包含pom.xml的任何其他项目文件夹,并从外部工具按钮中选择您的mvn-clean-package命令:

enter image description here

这将运行:

mvn clean package -DskipTests=true -U

从所选文件夹中。您可以在Eclipse控制台窗口中看到输出。

也可以从“运行”菜单访问外部工具。我想有一种方法可以通过Eclipse UI实现这一点,但是我没有足够长时间地使用Eclipse来发现它。