如果父pom具有Java EE BOM依赖性,是否应在子pom中明确提及所有依赖项?

时间:2015-01-20 21:26:50

标签: hibernate maven java-ee jboss resteasy

在我们的项目中,我们有REST层,EJB层和域(Entity)层的单独模块。

以下是对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中明确声明了?不应该依赖hibernate为其他人提供默认值。

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>

1 个答案:

答案 0 :(得分:2)

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

<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 post。

对于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>