Java JDK 11上的JAXB又一次出现了

Java JDK 11上的JAXB又一次出现了,java,maven,jaxb,Java,Maven,Jaxb,目前正在尝试启动并运行JAXB。开发工具的选择是IntelliJ IDEA 我发现在这个主题上非常有用,并且基本上将代码克隆到IDEA/maven项目中: 如果我从IDE运行JAXB_experience.java:main(),它就会工作并产生所需的输出 但是,虽然mvn clean package成功完成并创建了一个JAR,但我无法运行生成的存档: % java -jar target/jaxb-experiment-1.0.jar Error: Unable to initialize m

目前正在尝试启动并运行JAXB。开发工具的选择是IntelliJ IDEA

我发现在这个主题上非常有用,并且基本上将代码克隆到IDEA/maven项目中:

如果我
从IDE运行JAXB_experience.java:main()
,它就会工作并产生所需的输出

但是,虽然
mvn clean package
成功完成并创建了一个JAR,但我无法运行生成的存档:

% java -jar target/jaxb-experiment-1.0.jar
Error: Unable to initialize main class de.rwth_aachen.swc.miehe.experiments.jaxb.JAXB_Experiment
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
搜索错误会产生大量建议,将各种JAXB依赖项添加到pom.xml中,其中我在今天的课程中尝试了最多,但没有一个做得更好


这是非常不令人满意的,我觉得我可能遗漏了一些更一般的东西。

IntelliJ在运行时将项目依赖项添加到类路径中。在按CLI运行时,必须执行相同的操作

IntelliJ在运行时将项目依赖项添加到类路径。在按CLI运行时,必须执行相同的操作

这很不令人满意,我觉得我可能遗漏了一些更一般的东西

这是标准的Java内容。
java
命令在运行时查找依赖项的方式的结果

如果您想要一个可以像那样运行的JAR(
java-JAR…
),则需要将它构建为一个“uberJar”,所有依赖项都嵌入JAR文件本身。有一些Maven插件将生成一个“uberJAR”;e、 g.“阴影”插件

有关更多详细信息,请阅读

-jar
选项告诉JVM忽略
CLASSPATH
环境变量和任何
-cp
选项。可以在JAR文件的清单中定义类路径,但这意味着您正在JAR中嵌入文件路径名,这会导致其他问题

另一种选择是不使用
-jar
。相反,为
java
命令编写一个包装器脚本,并让包装器通过
-cp
选项指定应用程序的类路径。类路径应该列出所有依赖的JAR,包括包含JAXB实现及其依赖项的JAR

对于Java 9+,第二种选择是使用
jlink
生成由应用程序、其依赖项和精简的JRE组成的可执行文件


1-我可以辩论你的“不满意”标签,但这是毫无意义的。这种情况已经持续了20年或更长时间,而且(国际海事组织)现在不太可能改变。数以百万计(可能)的程序员已经知道了如何使用Java处理依赖关系,不管它是否令人满意

这很不令人满意,我觉得我可能遗漏了一些更一般的东西

这是标准的Java内容。
java
命令在运行时查找依赖项的方式的结果

如果您想要一个可以像那样运行的JAR(
java-JAR…
),则需要将它构建为一个“uberJar”,所有依赖项都嵌入JAR文件本身。有一些Maven插件将生成一个“uberJAR”;e、 g.“阴影”插件

有关更多详细信息,请阅读

-jar
选项告诉JVM忽略
CLASSPATH
环境变量和任何
-cp
选项。可以在JAR文件的清单中定义类路径,但这意味着您正在JAR中嵌入文件路径名,这会导致其他问题

另一种选择是不使用
-jar
。相反,为
java
命令编写一个包装器脚本,并让包装器通过
-cp
选项指定应用程序的类路径。类路径应该列出所有依赖的JAR,包括包含JAXB实现及其依赖项的JAR

对于Java 9+,第二种选择是使用
jlink
生成由应用程序、其依赖项和精简的JRE组成的可执行文件



1-我可以辩论你的“不满意”标签,但这是毫无意义的。这种情况已经持续了20年或更长时间,而且(国际海事组织)现在不太可能改变。数以百万计(可能)的程序员已经找到了如何使用Java处理依赖关系的方法,不管它是否令人满意。

JAXB在您的清单中吗?发布pom.xml中的依赖项部分。就在那里。这回答了你的问题吗?这是一个建议“向pom.xml添加各种JAXB依赖项的网站,我在今天的课程中尝试了很多,但没有一个对我有任何好处。”请原谅我的话。JAXB在您的清单中吗?发布pom.xml中的依赖项部分。就在那里。这回答了你的问题吗?这是一个建议“向pom.xml添加各种JAXB依赖项的网站,我在今天的课程中尝试了很多,但没有一个做得更好。”恕我直言。我需要在插件中添加这些依赖项,它应该是自包含的。假设我无法控制馈送到JVM的CLI参数。那么您可能需要进行研究。我需要在插件中使用此参数,它应该是自包含的。假设我无法控制馈送到JVM的CLI参数。那么您可能想研究一下。谢谢,至少这意味着我没有真正失败,因为我的示例在IDE中的工作与预期的一样。我将重新表述我的问题,使之更接近我的实际应用程序。谢谢,至少这意味着我没有真正失败,因为我的示例在IDE中的工作与预期的一样。我将重新措辞我的问题,更接近我的实际应用。