Maven:使用exec插件复制目录

时间:2011-08-05 17:47:38

标签: maven-2 maven maven-plugin exec-maven-plugin

我正在使用Maven 3.0.3。我在使用Maven exec插件将一个目录的内容复制到另一个目录时遇到了麻烦。可悲的是,当我在我的pom.xml中包含这个插件时......

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.1.1</version>
    <configuration>
        <executable>cp</executable>
        <arguments>
            <argument>-r</argument>
            <argument>web-app/*</argument>
            <argument>src/main/webapp</argument>
        </arguments>
    </configuration>
    <executions>
        <execution>
            <phase>verify</phase>
            <goals>
                <goal>exec</goal>
            </goals>
        </execution>
    </executions>
</plugin>

它不起作用。我收到以下错误...

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.1.1:exec (default-cli) on project jx: Result of /bin/sh -c cd /Users/davea/Documents/workspace/mycoUSA2/Technology/nna/myco2usa/jx && cp -r 'web-app/*' src/main/webapp execution is: '1'. -> [Help 1]

有谁知道如何修改我的插件配置以将一个目录的内容复制到另一个目录?谢谢, - 戴夫

3 个答案:

答案 0 :(得分:1)

请注意它运行的命令。从错误输出:

cp -r 'web-app/*' src/main/webapp

请特别注意它尝试复制的'web-app/*'文件。因为它引用了这个参数,cp命令正在web-app目录中查找名为*的特定文件。因为您没有具有此名称的文件,所以它已退出并显示错误代码1

maven-resources-plugin有一个旨在执行此任务的目标。为什么不试试呢?它可以让您的构建平台独立。

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.5</version>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${basedir}/src/main/web-app</outputDirectory>
                <resources>
                    <resource>
                        <directory>web-app</directory>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

答案 1 :(得分:1)

如果您使用的是bash,请尝试以下操作:

<executable>bash</executable>
<arguments>
    <argument>-c</argument>
    <argument>cp -r web-app/* src/main/webapp</argument>
</arguments>

这会生成一个新的bash,并为其执行命令cp -r web-app/* src/main/webapp

您还可以先将其输入正常的终端窗口,测试它是否适合您:

bash -c "cp -r web-app/* src/main/webapp"

请注意"符号确实有所不同,因为exec-maven-plugin会自动插入它们,因此它们不会包含在<argument>标记中。

答案 2 :(得分:0)

  1. mvn -X可能更具启发性

  2. 许多人会使用maven-antrun-plugin并在ant中编写脚本,以便获得便携式解决方案。