在编译期间在maven中执行批处理文件

时间:2014-02-07 02:33:44

标签: java maven-3 exec-maven-plugin

我正在使用exec-maven-plugin用maven执行批处理文件。我在包装阶段运行它,但我需要它早点运行。编译阶段没问题。

批处理脚本生成包含svn版本的属性文件。当阶段设置为package时,看起来之后它是否生成war文件。对我来说太迟了。

然而,在eclipse中我得到了这个错误:

Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (execution: Version, phase: compile)

我的pom.xml的相关部分:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
     <execution>
        <id>Version</id>
        <phase>compile</phase>
        <goals>
           <goal>exec</goal>
        </goals>
     </execution>
  </executions>
  <configuration>
     <executable>\my\path\version\version.bat</executable>
  </configuration>
</plugin>

首先,exec-maven-plugin仍然是正确的工具吗?

第二,它可以在比包更早的阶段运行吗?这记录在哪里? exec-maven-plugin项目页面上的邮件列表归档链接已过期。

1 个答案:

答案 0 :(得分:1)

问题不在于exec-maven-plugin,而在于m2e插件,它不知道如何处理exec-maven-plugin。解决问题的最简单方法是在Eclipse 中构建期间忽略该插件(右键单击问题并使用建议的解决方案)。命令行调用仍将运行批处理。

如果您希望m2e可以更复杂地配置。看看我的一个项目的片段:

<pluginManagement>
  <plugins>
    ...
    <!-- The following plugin is solely to make Eclipse happy, it's not executed during regular build -->
    <plugin>
      <groupId>org.eclipse.m2e</groupId>
      <artifactId>lifecycle-mapping</artifactId>
      <version>1.0.0</version>
      <configuration>
        <lifecycleMappingMetadata>
          <pluginExecutions>
            <pluginExecution>
              <pluginExecutionFilter>
                <groupId>com.googlecode.cmake-maven-project</groupId>
                <artifactId>cmake-maven-plugin</artifactId>
                <versionRange>[2.8.11-b4-SNAPSHOT,)</versionRange>
                <goals>
                  <goal>generate</goal>
                  <goal>compile</goal>
                </goals>
              </pluginExecutionFilter>
              <action>
                <execute />
              </action>
            </pluginExecution>
          </pluginExecutions>
        </lifecycleMappingMetadata>
      </configuration>
    </plugin>
  </plugins>
</pluginManagement>

此外,您可以在任何阶段运行任何插件的几乎任何目标,或者完全禁用其执行。在此,我停用了default-deploy的{​​{1}},并为maven-deploy-plugin阶段分配了自定义目标deploy-file

deploy

有一个特殊的 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>2.5</version> <executions> <execution> <id>default-deploy</id> <phase>none</phase> </execution> <execution> <id>versioned-deploy</id> <goals> <goal>deploy-file</goal> </goals> <phase>deploy</phase> <configuration> <file>${project.build.directory}/${project.build.finalName}.${project.packaging}</file> <repositoryId>${project.distributionManagement.repository.id}</repositoryId> <url>${project.distributionManagement.repository.url}</url> <generatePom>false</generatePom> <pomFile>${effective_dir}/pom.xml</pomFile> </configuration> </execution> </executions> </plugin> 命令,可以让你了解一个mavenized项目的最终配置。