在jdk1.6中使用Endorsed目录的确切方法是什么

我想将我的jaxws升级到2.2(jdk1.6捆绑了jaxws 2.1)。 我的jdk是(我没有安装公共jre):

java version "1.6.0_20" Java(TM) SE Runtime Environment (build 1.6.0_20-b02) Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode) 

在jaxws自己的文档中,他们解释了如何做到这一点:

解决此问题的一种方法是将jaxws-api.jar和jaxb-api.jar复制到JRE支持的目录中,该目录是$JAVA_HOME/lib/endorsed (or $JDK_HOME/jre/lib/endorsed)

但我不确定这对我的安装有什么影响。 对于初学者我只定义了%JAVA_HOME% 。 文件夹$JAVA_HOME/lib/endorsed是不存在的,所以我创建并复制了两个jar。 但是,如果我这样做(wsgen是来自jaxws的工具)

 wsgen -version 

我还是得到:

 JAX-WS RI 2.1.6 in JDK 6 

我也尝试创建文件夹JAVA_HOME\jre\lib\endorsed (请注意,在文档中他们说JDK_HOME,但因为我只有JAVA_HOME我使用了这个路径)。 仍然是相同的wsgen输出。

我的问题是:

  1. doc页面中JAVA_HOME和JDK_HOME有什么区别? 什么重要或只有两种方式来引用JAVA_HOME?
  2. ‘wsgen -version’是检查所使用的jaxws版本的有效方法,或者它总是在原始jdk中调用exe,但它并不意味着将使用支持的jar?
  3. 有人知道在jdk.16中安装jaxws2.2的非常详细的步骤吗?

我发现这篇post对我所看到的内容有一些暗示

包含在jre中的wsimport和wsgen作为exe位于jre / bin目录中,如果仍然从命令行调用它,它仍将运行Jax-WS 2.1实现。

要更新到Jax-WS 2.2,您需要从jaxws网站下载相关的JAX-WS 2.2.X RI。

您需要将内容提取到计算机上。

您还需要将jaxws-api.jar和jaxb-api.jar复制到endorsed目录中(根据您的原始描述)

但是,您现在需要使用jax-ws 2.2更新/下载中提供的那个,而不是使用wsgen.exe或wsimport.exe(适用于您的项目)。

在您从JAX-WS 2.2下载中提取的jaxws-ri目录中,您将看到一个bin目录和4个文件(wsgen.bat,wsgen.sh,wsimport.bat,wsimport.sh),这些是你需要运行它。

要运行它们,您必须设置JAXWS_HOME环境变量(有关详细信息,请参阅wsgen / wsimport.bat / sh文件)。

现在应该允许您使用JDK 1.6运行JAX-WS 2.2

您应该检查系统属性java.endorsed.dirs ,例如通过调用System.getProperty("java.endorsed.dirs") 。 在Windows机器上,这通常类似于C:\Program Files\Java\jdk1.6.0_16\jre\lib\endorsed 。 把你想要的jar文件放在这里。 如果该目录不存在,则只需创建它。

另一种选择是将jar放在您自己喜欢的目录中,但通过添加命令行开关-Djava.endorsed.dirs=覆盖系统属性。

它与您的环境变量无关。 %JAVA_HOME%只是文档中的简写,它不知道您安装Java的位置或安装的Java版本。

%JAVA_HOME%指的是JRE(非开发人员可以使用的常规运行时)。 %JDK_HOME%是指JDK的一个rood目录,一个Java开发工具包,开发人员可以使用的东西。

更重要的是,您必须知道何时运行wsgen运行它,以及相应的JVM配置了包含jar的endorsed目录。