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>
4

2 回答 2

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>
      ...
于 2013-06-06T13:56:47.123 回答
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 命令行排他性的,这就是我的建议。您仍然可以像这样从 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 命令的任何其他项目文件夹:

在此处输入图像描述

这将运行:

mvn clean package -DskipTests=true -U

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

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

于 2013-06-06T13:52:51.067 回答