java - Eclipse + Maven + Dynamic Web Project -> Maven 覆盖 Deployment Assembly

标签 java eclipse jsf maven deployment

总结

在 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 project。

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/”, 我将它们添加到项目的“部署程序集”:项目属性->部署程序集。有关详细信息,请参阅此问题:Eclipse + Maven + JavaServer Faces -> ClassNotFoundException: StartupServletContextListener .

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

问题

(1) 当我“项目->Maven->更新项目配置”时,“Maven 依赖项”从我的“部署程序集”中删除。有没有办法阻止这种情况发生,可能是通过一些 Maven 插件?

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

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

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

谢谢

--编辑--

eclipse 版本: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 plugin

(2) 解决方案

archetype 创建了新的 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>

最佳答案

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

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

另见此处:Maven/Tomcat Projects In Eclipse Indigo/3.7

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

关于java - Eclipse + Maven + Dynamic Web Project -> Maven 覆盖 Deployment Assembly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9976049/

相关文章:

jsf - 如何在JSF panelGrid中添加一个空元素?

java - 如何获取具有绝对路径的文件的 InputStream 并将其添加到 StreamedContent 对象以便在 p :fileDownload? 中使用它

java - 运行我的聊天程序时出现地址已在使用错误

java - 升级到 Ubuntu 14.04 后,JRE 在 Eclipse 中崩溃

Java - 对数组进行两次排序?

java - 不能使用 java.util.regex.Pattern 即使我在 eclipse 中使用 jre8

eclipse - 如何在Eclipse启动配置中将变量用于类路径定义?

validation - 注释约束后如何应用 JSF 验证器?

java - 如何降低Android中录制的音频可视化的速度?

java - 实现基本的字符串压缩