0

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

上一个问题中,我将 Maven 配置为将一些工件复制到war应用程序中,这样我就可以将它们提供给 Web 客户端。target/${project.artifactId}-${project.version}通过 Maven 命令行打包时,将它们复制到工作的方法。遗憾的是,在使用 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>
4

1 回答 1

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:copy 是可以的。将以下代码段添加到您的 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 以显示更新 Maven 配置对话框,然后单击确定。构建完成后,您应该在 Project Explorer 视图中的 Deployed Resources> web-resources 下看到您的 jar。

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

于 2014-01-15T09:54:47.200 回答