指定Maven的库目标

时间:2015-06-03 21:40:53

标签: xml eclipse maven gwt

如何告诉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>

结束时出现错误说:

  

神器尚未打包。当用于反应器工件时,应在包装后执行复制:参见MDEP-187。

2 个答案:

答案 0 :(得分:0)

dependency:copy-dependencies应该完成这项工作。

答案 1 :(得分:0)

看起来你正试图让Maven做出与预期不同的事情(例如,这里使用war作为输入和输出文件夹)。根据经验,永远不要试图与Maven战斗,你最终会失败。按照(几乎没有记录的)Maven Way™或者使用另一个 more 灵活工具(例如Ant + Ivy或Gradle)。

如果您想在Eclipse中使用带有Google Plugin for Eclipse的Maven和Maven,请查看https://web.archive.org/web/20130619170526/https://developers.google.com/eclipse/docs/faq#gwt_with_mavenhttps://code.google.com/p/google-web-toolkit/wiki/WorkingWithMaven

要直接回答您的问题,假设您的<packaging>war</packaging>项目已将warSourceDirectory从其src/main/webapp默认值更改为war,请尝试{ {3}}。
但是推荐的方法(参见上面的链接)是使用war:inplace(或war:exploded,即一个简单的mvn package)并使用webappDirectory运行GWT DevMode,而不是{{1 }}