Maven:强制 Jersey 使用特定的 Artifact 版本

标签 maven jersey jena

我有一个 Maven 存储库,可以在其中加载 Jena TDB 0.9.3(取决于 Jena ARQ 2.9.3)、Jersey 1.8 和 RMOnto 1.0 。正如您所期望的,重点是对语义数据集进行一些分析。

看起来 RMOnto 内置了 ARQ 2.8.7,如“硬连线”中所示。其 pom 文件中没有任何显式依赖项,但 jar 文件包含 ARQ.class。这非常棘手,因为您不会通过 Maven Enforcer Plugin 等注意到它。

看起来这会导致 Jersey 使用 RMOnto 的 ARQ 版本,而不是 pom.xml 中定义的版本。这是minimal example 。当您运行测试时(检查 ARQ.VERSION 是否等于 2.9.3),它会成功。当您构建项目并将其部署在 Tomcat 7 上时,您应该会看到 2.8.7 作为输出。

  • 这种行为是否符合预期?原因是什么?
  • 如何强制 Jersey 使用 ARQ 2.9.3?
  • 万一不可能,能否隔离 RMOnto 使用 2.8.7,而其余源则使用 2.9.3?

提前致谢!

最佳答案

您应该首先在依赖项列表中定义 ARQ 2.9.3。通过这样做,您可以强制您的构建使用该特定版本。在选择要使用的 Artifact 时,依赖顺序是相关的。


更新

好的,我明白问题所在了。

因此,您可以采取的解决方法是确保将 ARQ 2.9.3 版本添加到 WEB-INF/classes 文件夹中。这可以使用 maven-dependency-plugin 来完成:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>org.apache.jena</groupId>
                                <artifactId>jena-arq</artifactId>
                                <version>2.9.3</version>
                                <outputDirectory>${project.build.directory}/classes</outputDirectory>
                                <excludes>**/META-INF/</excludes>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

您的 war 以及爆发的 war 现在将包含 WEB-INF/classes 文件夹中 ARQ 2.9.3 中的所有类。它们将在 WEB-INF/lib 文件夹中的任何 jar 文件之前加载。

注意:我还没有在 Tomcat 上测试过这个,但我看不出它不起作用。

NB2:这是一个黑客行为。最好的办法是从 RMOnto jar 中删除 ARQ 包。

关于Maven:强制 Jersey 使用特定的 Artifact 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13237405/

相关文章:

java - 导入中缺少 Guice 多重绑定(bind)包

java - Spring + Jersey + 过滤器 + @Provider

java - 如何将 rdf xml 转换为 n-triples?

python - Apache Jena 和 Python

eclipse - spring 工具套件 spring mvc 项目 - 创建后的 22 个问题

maven - sudo 将使用哪个 maven settings.xml 文件?

java - Maven:将多个模块 jar 组合成一个 war 文件?

java - 仅当jetty应用程序在本地主机上运行时,非英语(希伯来语)字符才能很好地插入mysql数据库?! (部署到heroku)

spring - 使用 Spring + Jersey 的异步 API

java - HTTP 状态 500 - Servlet 执行抛出异常