Eclipse + Maven + Dynamic Web Project -> Maven 覆盖部署程序集

2022-09-02 22:38:01

总结

在 Eclipse 中,当我“Maven->Update Project Configuration”时,“Maven Dependencies”会从项目的“Deployment Assembly”中删除。

我从一个预配置的Eclipse项目开始:File->New->Dynamic Web Project->JavaServer Face v2.0 Project。为了删除“魔术”,我然后将其转换为Maven项目:Configure->Convert to Maven项目。

pom.xml包含以下内容:

<build>
    <finalName>jsf-facelets-tutorial</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>WebContent/WEB-INF/web.xml</webXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>el-api</artifactId>
        <version>1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-api</artifactId>
        <version>2.0.5</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-impl</artifactId>
        <version>2.0.5</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

然后,为了确保在部署之前将 Maven 依赖项复制到“WEB-INF/lib/”,我将它们添加到项目的“部署程序集”:Project Properties->Deployment Assembly。有关更多详细信息,请参阅此问题:Eclipse + Maven + JavaServer Faces -> ClassNotFoundException: StartupServletContextListener

我知道有两个相关的问题。

问题

(1)当我“Project->Maven->Update Project Configuration”时,“Maven Dependences”从我的“Deployment Assembly”中删除。有没有办法阻止这种情况发生,可能通过一些Maven插件?

(2)当我从Eclipse内部构建.war时,一切都很好,.war在Tomcat中运行良好。但是当我使用Maven从命令行构建它时,来自“WebContent/”的.html文件不会添加到.war中。同样,我需要哪些Maven设置/插件来解决此问题?mvn clean compile war:war

仅供参考,这是一个非常基本的应用程序...只是一个登录页面和一个欢迎页面。

如果我应该提供任何其他详细信息(web.xml,faces-config-xml,login.xhtml),请告诉我,我会添加它们。

谢谢

--编辑--

日食版本: 3.6.2

Eclipse m2e 版本: 1.0.1

Apache Maven 版本: 2.2.1

(1) 解决方案

更新到 Eclipse Java EE 3.7.2 (Indigo)。现在还使用 m2e-wtp Maven Integration for Eclipse WTP 插件

(2) 解决方案

从原型创建新的 Maven 项目,然后从原型创建 Eclipse->Import->Existing Maven Project。使用新的 Eclipse 版本和 m2e-wtp,Eclipse 中的 Java EE 透视图可以与标准的 Maven 目录结构很好地配合使用。

pom.xml现在也更简单了:

<build>
    <finalName>jsf-facelets-tutorial</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>el-api</artifactId>
        <version>1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-api</artifactId>
        <version>2.0.5</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-impl</artifactId>
        <version>2.0.5</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

答案 1

我建议迁移到Eclipse 3.7.x(Indigo),它对m2e有更好的支持,并且还允许您使用WTP的Maven集成(单独安装),这应该使事情变得容易得多。我想您的大多数问题都应该通过更新到Indigo来解决。

安装链接: http://marketplace.eclipse.org/node/96737

另请参阅此处:Eclipse Indigo/3.7 中的 Maven/Tomcat Projects

编辑将您的Web资源放在WebContent下,然后将其作为目录添加到WAR插件中可能是一种解决方案。干净的方法是将它们放在 or 下,并且它们应该自动包含在 WAR 文件中。 不是 Maven 的标准目录之一。src/main/resourcessrc/main/webappWebContent


答案 2

推荐