0

我有一个包含多个项目的工作区。都是 Maven 项目。其中一个项目的目标目录在构建后包含一个批处理文件。现在,我需要工作区中的其他项目之一来运行此批处理文件。因此,我想以编程方式获取当前工作区的路径,而不需要引入新的依赖项来完成此操作。有人知道这样做的方法吗?

编辑 1:我在工作区中有一个父 Maven 项目。其子目标目录之一包含批处理文件。父项(这是一个测试项目)的不同子项需要运行批处理文件。如果我使用 Eclipse 运行单个测试,我可以使用 Maven basedir 变量来获取不漂亮且不起作用的批处理文件。所以我想避免这种解决方案。

4

2 回答 2

0

maven-antrun-plugin怎么样?它不漂亮,但它完成了工作:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.7</version>
    <executions> 
        <execution> 
            <id><!-- insert an id --></id> 
            <phase><!-- insert a maven lifecycle phase --></phase> 
            <configuration> 
                <tasks> 
                    <exec 
                        dir="${basedir}" 
                        executable="${basedir}/src/main/sh/your-script.sh" 
                        failonerror="true"> 
                        <arg line="arg1 arg2 arg3" /> 
                    </exec> 
                </tasks> 
            </configuration> 
            <goals> 
                <goal>run</goal> 
            </goals> 
        </execution> 
    </executions>
</plugin>

参考:http ://maven.apache.org/plugins/maven-antrun-plugin/usage.html

于 2012-11-16T21:45:17.097 回答
0

您将遇到的问题是 Eclipse 中的项目不一定存储在工作区目录中;它们可以在文件系统上的任何位置。这意味着仅仅知道工作区的位置不一定能帮助您找到批处理文件。

例如:我的工作区是$HOME/workspace,但我所有的项目(工作副本)都在$HOME/code/project. 能够确定工作空间并不是很有帮助。项目可以存在于工作区之外,并且仍然可以使用File -> Import出现在 Eclipse 中。

您最好的选择可能是使用build-helper-maven-plugin的attach-artifact目标将批处理文件“附加”到构建中。这里有一个如何做到这一点的例子。

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.7</version>
    <executions>
      <execution>
        <id>attach-artifacts</id>
        <phase>package</phase>
        <goals>
          <goal>attach-artifact</goal>
        </goals>
        <configuration>
          <artifacts>
            <artifact>
              <file>script.bat</file>
              <type>bat</type>
            </artifact>
          </artifacts>
        </configuration>
      </execution>
    </executions>
  </plugin>

然后,您的其他项目可以使用 maven-dependency-plugin 的复制目标将脚本解析到自己的目录中并从那里运行它。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.5.1</version>
    <executions>
      <execution>
        <id>copy</id>
        <phase>package</phase>
        <goals>
          <goal>copy</goal>
        </goals>
        <configuration>
          <artifactItems>
            <artifactItem>
              <groupId>...</groupId>
              <artifactId>...</artifactId>
              <version>...</version>
              <type>bat</type>
              <overWrite>true</overWrite>
            </artifactItem>
          </artifactItems>
          <outputDirectory>${project.build.directory}/scripts</outputDirectory>
          <overWriteSnapshots>true</overWriteSnapshots>
        </configuration>
      </execution>
    </executions>
  </plugin>
于 2012-11-16T17:29:58.010 回答