指定 Maven 的库目标

Specify Library Target of Maven

如何告诉 Maven 将依赖项复制到特定位置?

旁白:我在 Eclipse 中有一个 GWT 项目,它也是一个更大项目的 Maven 模块。这个 GWT 项目依赖于一些库,我需要将它们复制到 <project-dir>/war/WEB-INF/lib。我如何告诉 Maven 这样做?


编辑:我找到了一种复制单个依赖项的方法 - 但是有没有一种方法可以通过简单的指令复制所有依赖项?

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.10</version>
        <executions>
            <execution>
                <id>copy</id>
                <phase>package</phase>
                <goals>
                    <goal>copy</goal>
                </goals>
                <configuration>
                    <artifactItems>
                        <artifactItem>
                            <groupId>junit</groupId>
                            <artifactId>junit</artifactId>
                            <overWrite>false</overWrite>
                            <outputDirectory>${basedir}/war/WEB-INF/lib</outputDirectory>
                            <destFileName>optional-new-name.jar</destFileName>
                        </artifactItem>
                    </artifactItems>
                    <outputDirectory>${project.build.directory}/wars</outputDirectory>
                    <overWriteReleases>false</overWriteReleases>
                    <overWriteSnapshots>true</overWriteSnapshots>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>  

我也试过这个:

</dependencies>

<build>
    <outputDirectory>${project.basedir}/war/WEB-INF/classes</outputDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <!-- up to <phase>deploy</phase> -->
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.basedir}/war/WEB-INF/lib</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>

</build>

以错误结束:

Artifact has not been packaged yet. When used on reactor artifact, copy should be executed after packaging: see MDEP-187.

dependency:copy-dependencies 应该可以胜任。

看起来您正试图让 Maven 做一些与它期望您做的不同的事情(例如,这里使用 war 作为输入和输出文件夹)。作为一个经验法则,永远不要试图与 Maven 战斗,你最终会输的。遵循(几乎未记录的)Maven Way™ 或使用另一个 更多 灵活的工具(例如 Ant+Ivy 或 Gradle)。

如果您想在 Eclipse 中通过 Google Eclipse 插件将 GWT 与 Maven 结合使用,请查看 https://web.archive.org/web/20130619170526/https://developers.google.com/eclipse/docs/faq#gwt_with_maven and https://code.google.com/p/google-web-toolkit/wiki/WorkingWithMaven

要直接回答您的问题,假设您将 warSourceDirectory 从其 src/main/webapp 默认值更改为 war<packaging>war</packaging> 项目,然后尝试 war:inplace.
不过,推荐的方法(参见上面的链接)是使用 war:exploded (or war:war,即简单的 mvn package) 和 运行 GWT DevMode 使用 webappDirectory,而不是 warSourceDirectory