Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
对不推荐使用的JavaEE模块有选择地使用第三方实现_Java_Maven_Jakarta Ee_Java 9_Java 11 - Fatal编程技术网

对不推荐使用的JavaEE模块有选择地使用第三方实现

对不推荐使用的JavaEE模块有选择地使用第三方实现,java,maven,jakarta-ee,java-9,java-11,Java,Maven,Jakarta Ee,Java 9,Java 11,我目前正在移植一个与JDK9+兼容的开源库,它依赖于一些Java EE模块,这些模块在Java 9中已被弃用,在Java 11中已被删除:特别是JAXB、JAX-WS和javax.annotation 我向第三方实现添加了显式依赖项,建议如下: com.sun.xml.ws ,但看起来它们是用于项目类之间的依赖于jdk版本的实现,而不是依赖关系之间的实现 另外,如果无法在JDK 8上使用认可的实现,是否有一种方法可以可靠地测试使用第三方实现不会引入任何回归 有没有办法生成一个使用第三方的jar

我目前正在移植一个与JDK9+兼容的开源库,它依赖于一些Java EE模块,这些模块在Java 9中已被弃用,在Java 11中已被删除:特别是JAXB、JAX-WS和javax.annotation

我向第三方实现添加了显式依赖项,建议如下:


com.sun.xml.ws
,但看起来它们是用于项目类之间的依赖于jdk版本的实现,而不是依赖关系之间的实现

另外,如果无法在JDK 8上使用认可的实现,是否有一种方法可以可靠地测试使用第三方实现不会引入任何回归

有没有办法生成一个使用第三方的jar文件 JDK9+上的实现和JDK8上认可的实现

不幸的是,没有。当通过jar文件分发库时,您无法控制其他jar和库如何在类路径中列出。这使得类加载对您来说是不确定的。这对于您的情况意味着,如果上述库包含在JDK8环境中的类路径中,则无法确定或控制加载的类的版本

此外,如果无法在上使用经认可的实现 JDK 8,有没有一种方法可以使用第三方可靠地测试它 实现不引入任何回归

作为作者,您可以在不同的运行时环境中执行测试以检查回归

我是否应该发布两个不同的JAR,一个使用JavaEE第三方 包括JDK9+和JDK8的实现吗

这是一个完全合理的解决方案,其他人以前也使用过。以sqlserver jdbc JAR为例,它基于jre有不同的版本: 对于这里描述的情况,JDK9+版本的jar可以声明您在问题中提到的其他依赖项,而JDK8版本则不能

另一种选择是使用一个jar,并声明您提到的依赖项。这将向使用者发出信号,表明运行时环境必须包含声明的依赖项中的类。需要一些文档来指导库的使用者何时必须显式地将声明为提供的JAR添加到其类路径中


依我看,最清晰的解决方案是两个jar,在jar名称中引用JRE版本,并具有不同的依赖关系。它只需要很少的文档(大多数人都不看)。而且它允许您更自由地对库进行更改。

您可以详细介绍一下步骤吗,但我希望我的库仅在必要时使用它们,并继续使用JDK8?上认可的实现。。我应该发布两个不同的罐子吗。。是的,您可以。是否有一种方法可以可靠地测试使用第三方实现不会引入任何回归?。。这将是用户(您)的尝试,这不是开源社区的工作方式吗?也许您可以具体说明您正在使用的实现,并使用MR-JARs解决它。但是,除非您知道依赖于(哪些)JavaEE模块的是什么,否则无法对其进行进一步评论。您可以保留依赖项可选,并建议为Java 11以后的版本添加哪一个。为Java 8和Java 9+创建2个单独的版本。这就是我们在将框架从Java8升级到Java10时所做的。
<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-ri</artifactId>
  <version>2.3.0.1</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-ri</artifactId>
  <version>2.3.0.1</version>
</dependency>
<dependency>
  <groupId>com.sun.activation</groupId>
  <artifactId>javax.activation</artifactId>
  <version>1.2.0</version>
</dependency>