【问题标题】:execute a batch file in maven during compile在编译期间在maven中执行一个批处理文件
【发布时间】:2014-02-07 11:37:20
【问题描述】:

我正在使用 exec-maven-plugin 使用 maven 执行批处理文件。我让它在打包阶段运行,但我需要它更早运行。编译阶段就好了。

批处理脚本会生成一个包含 svn 版本的属性文件。当阶段设置为打包时,它看起来就像是这样做之后它制作了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 项目页面上的邮件列表存档链接已过期。

【问题讨论】:

  • 你为什么需要这样的批处理文件,因为这会使你的构建不再可移植。除此之外,批处理文件在做什么?

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


【解决方案1】:

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

如果您希望m2e 可以更复杂地配置。看看我的一个项目中的 sn-p:

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

您还可以在任何阶段运行任何插件的几乎任何目标或完全禁用它的执行。在这里,我禁用了maven-deploy-plugindefault-deploy,并将自定义目标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>

有一个特殊的mvn help:effective-pom 命令可以让您了解mavenized 项目的最终配置。

【讨论】:

    猜你喜欢
    • 2022-10-24
    • 2020-01-27
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多