【问题标题】:Unable to configure maven dependencies correctly无法正确配置 Maven 依赖项
【发布时间】:2013-01-24 23:26:34
【问题描述】:

我在 pom 中有一个具有以下依赖项的网络应用:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <version>10.9.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.1.9.Final</version>
    <scope>test</scope>
</dependency>

使用此配置,我在 junit 测试中收到以下错误:

java.lang.ClassFormatError:方法中的缺失代码属性是 在类文件 javax/persistence/Persistence 中不是本机或抽象的

我找到了有关此错误here 的一些信息。 所以,我删除了 'javaee-web-api' 依赖项。

之后我得到编译错误“包 javax.persistence 不存在”,等等。

所以,我将“hibernate-entitymanager”的范围更改为默认(编译)。

工作的 pom(依赖项)如下所示:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <version>10.9.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.1.9.Final</version>
</dependency>

现在一切正常,除了生成的战争包含休眠 jar,这是我不想要的。

任何建议如何解决这个问题,正确的 maven pom?

【问题讨论】:

    标签: maven maven-2 maven-3


    【解决方案1】:

    如果您正在使用应用程序服务器,您可以使用(仍然是特定于供应商的)JPA API 替换休眠依赖项,该 API 提供的范围如下(示例是 JBoss 与休眠):

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <scope>provided</scope>
    </dependency>
    

    【讨论】:

    • 感谢@kostja,这确实有效。但我不针对任何特定的应用程序服务器。
    • @Atul 恐怕eclipselink和hibernate都没有共同的依赖关系。请参阅thisthis 问题。您必须根据应用程序服务器使用的实现来决定。
    • 嗯,太糟糕了。希望有更清洁的东西。
    • @Atul 是的,奇怪的是,尽管有标准和至少两个标准实现,但仍然没有共同的 API 依赖。那么也许对于 JPA 2.1 :)
    【解决方案2】:

    最后,我使用配置文件使用相同的依赖项集完成了这项工作。 这是 pom 的相关部分:

    <profiles>
        <profile>
            <id>test</id>
            <dependencies>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-entitymanager</artifactId>
                    <version>4.1.9.Final</version>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>package</id>
            <dependencies>
                <dependency>
                    <groupId>javax</groupId>
                    <artifactId>javaee-web-api</artifactId>
                    <version>6.0</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-entitymanager</artifactId>
                    <version>4.1.9.Final</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.9.1.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    

    现在,我使用以下命令进行打包和测试,

    mvn -Ptest 测试

    mvn -Ppackage package -DskipTests

    -DskipTests 是必需的,否则,包目标会触发“测试”,导致与我开始时相同的错误,因为它使用为“包”配置的相同依赖项集。

    java.lang.ClassFormatError:方法中的缺失代码属性是 在类文件 javax/persistence/Persistence 中不是本机或抽象的

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,并且能够通过向 Maven pom.xml 文件添加几个依赖项来解决它。 See this answer 了解更多详情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-23
        • 2013-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-06
        • 2012-11-11
        • 1970-01-01
        相关资源
        最近更新 更多