需要在Eclipse工作区内运行批处理文件

时间:2012-11-16 16:55:13

标签: eclipse maven

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

  <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的copy goal将脚本解析到自己的目录中并从那里运行。

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

答案 1 :(得分: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