【问题标题】:should all dependencies be explicitily mentioned in child pom if the parent pom has Java EE BOM dependency?如果父 pom 具有 Java EE BOM 依赖项,是否应该在子 pom 中明确提及所有依赖项?
【发布时间】:2015-03-19 06:39:32
【问题描述】:

在我们的项目中,我们为 REST 层、EJB 层和域(实体)层设置了单独的模块。

这是对我们 REST 层的依赖:

            <dependency>
               <groupId>org.jboss.resteasy</groupId>
               <artifactId>resteasy-jaxrs</artifactId>
            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>resteasy-jettison-provider</artifactId>
            </dependency>
            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>resteasy-multipart-provider</artifactId>
            </dependency>
            <!-- Resteasy Server Cache -->
            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>resteasy-cache-core</artifactId>
            </dependency>
            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>resteasy-jackson-provider</artifactId>
            </dependency>

Q1: 是否存在提供所有这些的 org.jboss.resteasy 的单一依赖项?有没有简化的可能?是否应该明确声明所有这些依赖项?如果没有,RestEasy 默认提供什么?事实上,我使用 JBoss AS 6。所以这些依赖项仅用于编译时。反正他们的范围是provided

我们的域层也是如此:

</dependency>
                <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <scope>provided</scope>
        </dependency>

                <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-annotations</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <scope>provided</scope>
        </dependency>

                <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <scope>provided</scope>
        </dependency>

Q2:为什么在我们的 pom.xml 中显式声明这些?对休眠的依赖不应该为其他依赖提供默认值。

Q3 以下是一种有效的重构方式(使用Jboss bom)吗?在父 pom.xml 中有一个依赖项,每个模块都只是从父级继承。这样子 pom.xml 就简化了,简短了。这有什么缺点?我会得到我在上面的每个 REST 和域层中明确提供的所有依赖项吗?

<dependency>
        <groupId>org.jboss.bom.eap</groupId>
        <artifactId>jboss-javaee-6.0-with-resteasy</artifactId>
        <version>${jboss.bom.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

【问题讨论】:

    标签: hibernate maven jakarta-ee jboss resteasy


    【解决方案1】:

    我认为这将为您提供所需的一切:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.jboss.bom</groupId>
                <artifactId>jboss-javaee-6.0-with-all</artifactId>
                <version>1.0.7.Final</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
            <dependency>
                <groupId>org.jboss.spec</groupId>
                <artifactId>jboss-javaee-all-6.0</artifactId>
                <version>3.0.3.Final</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>xalan</groupId>
                <artifactId>xalan</artifactId>
                <version>2.7.2</version>
                <scope>provided</scope>
            </dependency>
    </dependencies>
    

    您可以获得 Java EE 6 中的所有内容(所有 API)。如果你想要一些特定于 RestEasy 的功能,你需要为此添加依赖项。

    由于一个错误,需要 Xalan 依赖项,请参阅 this 帖子。

    对于 WildFly 8.2 上的 Java EE 7,请使用以下依赖项:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.wildfly.bom</groupId>
                <artifactId>jboss-javaee-7.0-with-all</artifactId>
                <version>8.2.0.Final</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <dependencies>
        <dependency>
            <groupId>org.jboss.spec</groupId>
            <artifactId>jboss-javaee-all-7.0</artifactId>
            <version>1.0.2.Final</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    

    【讨论】:

    • 为什么需要 org.jboss.spec 和 org.jboss.bom?一个都不够吗?
    • BOM 就是物料清单。当您添加 Jboss 特定的依赖项时,它很有用。您不需要找出在您的 Jboss 服务器中运行的依赖项的确切版本。版本从 BOM 填充。所以省略版本标签。对于这个特定示例,不需要 BOM,但我认为无论如何添加它是一个好习惯。
    • 仅有 BOM 是不够的,您绝对需要规范。
    • 这将包括 RestEasy、Hibernate、Resteasy-Jackson 提供程序等吗?我怎么知道它提供的默认值是什么。谢谢
    • 没有。这包括所有Java EE 6 api's。你得到的 JSR 中有什么,你没有得到什么是特定于 RestEasy 或 Hibernate 实现的。因此,如果您想成为平台不可知论者,这就是您应该使用的全部。 JSR 的其他实现(即 MoXy、Eclipselink)也应该可以正常工作。当您使用特定于实现的功能时,您需要将特定实现添加为依赖项。
    猜你喜欢
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 2021-12-18
    • 2011-07-25
    • 2018-04-12
    • 2022-12-06
    • 2016-12-17
    • 2020-07-12
    相关资源
    最近更新 更多