使Eclipse尊重Maven-Dependency-Plugin

时间:2014-01-14 09:03:52

标签: eclipse tomcat m2eclipse maven-dependency-plugin m2e-wtp

在通过WTP将资源部署到Tomcat之前,如何让Eclipse识别我对maven-dependency-plugin的使用并执行

a previous question我配置Maven将一些工件复制到war应用程序中,因此我可以将它们提供给Web客户端。通过Maven命令行打包时,将它们复制到target/${project.artifactId}-${project.version}的方法很有效。遗憾的是,使用Eclipse的Tomcat集成时没有这样的运气。

Maven插件配置:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
    <execution>
        <id>copy</id>
        <phase>compile</phase>
        <goals>
            <goal>copy</goal>
        </goals>
        <configuration>
            <artifactItems>
                <artifactItem>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>3.8.1</version>
                    <type>jar</type>
                    <overWrite>false</overWrite>
                    <destFileName>optional-new-name.jar</destFileName>
                </artifactItem>
            </artifactItems>
            <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/</outputDirectory>
            <overWriteReleases>false</overWriteReleases>
            <overWriteSnapshots>true</overWriteSnapshots>
        </configuration>
    </execution>
</executions>

1 个答案:

答案 0 :(得分:1)

这个答案假设你使用的是Eclipse Java EE Kepler SR1(或更新版本),它附带了Maven集成插件(m2e和m2e-wtp)。

m2e-wtp,Maven Integration for WTP插件忽略了maven CLI构建并配置WTP以从已知位置发布资源。

所以你需要做两件事:

  • 配置依赖插件,以便在eclipse构建期间将jar复制到已知的m2e-wtp位置
  • 告诉m2e在项目配置更新期间实际运行依赖插件。

首先,在属性部分中定义一个新的maven属性:

<jars.directory>${project.build.directory}/${project.artifactId}-${project.version}/</jars.directory>

在maven-dependency-plugin配置中,使用:

<outputDirectory>${jars.directory}</outputDirectory>

现在应该使用Maven CLI为您提供相同的构建结果。然后你需要使用一个特定的m2e配置文件,它将在Eclipse中运行时自动启用,并在所有其他情况下被忽略:

<profiles>
    <profile>
        <id>m2e</id>
        <!-- This profile is only activated when building in Eclipse with m2e -->
        <activation>
            <property>
                <name>m2e.version</name>
            </property>
        </activation>
        <properties>
            <jars.directory>${project.build.directory}/m2e-wtp/web-resources/</jars.directory>
        </properties>
    </profile>
</profiles>

最后,我们需要让m2e知道可以运行maven-dependency-plugin:在项目配置期间复制。将以下代码段添加到pluginManagement部分:

<pluginManagement>
    <plugins>
        <!--This plugin's configuration is used to store Eclipse m2e settings 
            only. It has no influence on the Maven build itself. -->
        <plugin>
            <groupId>org.eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
                <lifecycleMappingMetadata>
                    <pluginExecutions>
                        <pluginExecution>
                            <pluginExecutionFilter>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-dependency-plugin</artifactId>
                                <versionRange>[2.8,)</versionRange>
                                <goals>
                                    <goal>copy</goal>
                                </goals>
                            </pluginExecutionFilter>
                            <action>
                                <execute>
                                    <runOnConfiguration>true</runOnConfiguration>
                                    <runOnIncremental>false</runOnIncremental>
                                </execute>
                            </action>
                        </pluginExecution>
                    </pluginExecutions>
                </lifecycleMappingMetadata>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

现在,确保m2e知道所有这些配置更改:按Alt + F5打开Update Maven Configuration对话框,然后单击ok。构建完成后,您应该在Deployed Resources&gt;下看到您的jar。 web资源,在Project Explorer视图中。

从现在开始,Tomcat的部署应该在您的webapp的根目录中包含optional-new-name.jar。