Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在pom.xml中处理web服务器的不同依赖项要求_Java_Maven_Tomcat_Primefaces_Glassfish - Fatal编程技术网

Java 如何在pom.xml中处理web服务器的不同依赖项要求

Java 如何在pom.xml中处理web服务器的不同依赖项要求,java,maven,tomcat,primefaces,glassfish,Java,Maven,Tomcat,Primefaces,Glassfish,我正在尝试使用JSF和PrimeFaces编写一个可以在WildFly 8、Tomcat 7和GlassFish 4上运行的应用程序。这是我的情况 对于WildFly,我不包括任何内容 对于玻璃鱼,我需要包括: <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.faces</artifactId> &l

我正在尝试使用JSF和PrimeFaces编写一个可以在WildFly 8、Tomcat 7和GlassFish 4上运行的应用程序。这是我的情况

对于WildFly,我不包括任何内容

对于玻璃鱼,我需要包括:

     <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.faces</artifactId>
        <version>2.2.5</version>
    </dependency> 

玻璃鱼
javax.faces
2.2.5
对于TomCat,我需要包括

     <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.faces</artifactId>
        <version>2.2.5</version>
    </dependency> 
     <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency> 

玻璃鱼
javax.faces
2.2.5
javax.inject
javax.inject
1.
我对Maven比较陌生,但我希望能够组织一个对人们来说“容易”运行的项目。我会做出不同的“指令”来构建特定于web容器的版本吗?我需要3个单独的pom文件吗?maven可以有条件包含吗?我是否有pom-tomcat.xml pom-glassfish.xml pom-wildfly.xml文件,而您指向其中一个文件,它包含其他内容

任何建议都会有帮助


谢谢

我认为用Maven实现它最简单的方法是使用,例如:


(附带的问题是,为什么不在所有情况下都包含所有相同的依赖项?

不幸的是,有些Web服务器已经有了自己版本的某些类,如果包含这些类,就会导致崩溃。我在谷歌上搜索了一下,发现了一些bug报告,上面说在每种情况下都要包含/排除各种库。你不能用一个构建来生成工件。您需要分别为每个环境调用Maven。最好的办法是只调用一次Maven,获取所有环境的所有工件。当从存储库管理器检索war时,这些配置文件将永远不会被激活,因此war的任何下游工件(例如,包含war的ear)都将是错误的。。Maven的做法是为不同的部署平台提供两个不同的模块。使用模块也是一种变通方法,我认为仅基于依赖关系和运行时打包需求将项目拆分为模块,而不是基于代码/代码的分层组织,(用你的话来说)也是一个“糟糕的想法”。这不是直观的,即使是最新的maven,模块支持有时也会受到影响,可能会使构建复杂化,等等。另一方面,概要文件很简单,并且清楚地声明了意图。它还可以管理包的最终名称。虽然RM从来都不是问题的一部分,所以我不确定原始作者是否关心这个问题……Tomcat是一个servlet引擎,而Glassfish和Wildfly是应用服务器。所以一定有区别。例如javax.inject谁是Tomcat上的实现者?你自己做过Guice/Spring的注入吗?一切都“正常”,但我只需要阅读不同组合的不同依赖项。。。
    <profiles>
        <profile>
            <id>tomcat</id>
            <dependencies>
                <dependency><!--tomcat dependencies--></dependency>
            </dependencies>
        </profile>
        <profile>
            <id>glassfish</id>
            <dependencies>
                <dependency><!--glassfish dependencies--></dependency>
            </dependencies>
        </profile>
    </profiles>
    mvn -P glassfish
    mvn -P tomcat