在不使用Maven的情况下将JAXB的库包含到JAR文件中

马蒂亚斯·海因莱因

我在Eclipse中有一个Java项目,它使用javax.xml.bind.JAXB类。从Eclipse内部启动应用程序非常有效。但是,当我将项目导出为(可运行)jar文件并使用java -jar myfile.jar运行它时,它以结尾java.lang.NoClassDefFoundError: javax/xml/bin/JAXBException

在Eclipse Runnable JAR File Specification中使用库处理的三个选项(提取,包,子文件夹)也不能解决问题-实际上,在任何情况下都不会导出库。

似乎JAXB的库(似乎是rt.jar)不被视为包含在jar文件中的必需库。但是,在运行jar文件时,仍然找不到该文件。我读过必须将库添加到类路径,但是这对我来说似乎很奇怪,因为rt.jar是标准库的一部分。这个图书馆有什么特别之处吗?

当前,我不使用Maven或类似的东西进行依赖和构建管理,如果可能的话,我希望将来避免使用它。我认为,也一定有没有Maven的方法。

我在SO和Google上找到了几篇文章,但无法为我找到解决方案。

非常感谢你!

皮特·卡尔瓦斯(Piotr P.

如注释中所述,Eclipse可能使用与系统不同的Java版本(默认情况下)。JRE 11中不提供JAXB API和实现。

要在所有版本的Java上工作,最好的选择是:

  • 下载JAXB RI发行版。如今,我将选择版本3.0(与Java 8中的二进制版本不兼容,因为它使用jakarta.xml而不是javax.xml软件包名称),如Juliano的回答:

https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/3.0.0/jaxb-ri-3.0.0.zip

  • 4个文件复制jakarta.activation.jarjakarta.xml.bind-api.jarjaxb-core.jarjaxb-impl.jarmod文件夹到项目的库文件夹(比方说lib
  • 将4个库添加到项目的“构建路径”中
  • 确保在整个代码中使用JAXB 3.0(批注和类的包以开头jakarta.xml
  • 在Eclipse中运行一次应用程序,以便它更新运行配置(或自己更新运行配置的类路径),
  • 将项目导出到JAR文件。

在Eclipse提出的三个导出选项中:“提取所需的库”将创建一个所谓的胖子罐(所有内容都放在一个JAR文件中)。它可以工作,但是会删除JAXB jar中的许可声明(因此无法分发)。“复制所需的库”是您的最佳选择,但是随后您必须将jar文件与子文件夹一起移动。_“。“需要打包的库”将不起作用,因为JVM无法读取jar中的jar(与WAR软件包中的JAR不同)。


问题作者的编辑:上面的内容对我来说很有效,除了我在这两个库(Java 8中的javax.xml和3.0版中的jakarta.xml)如何处理@XmlAttribute注释方面经历了小的差异在javax.xml中,我可以在公共获取方法上放置一个没有其他参数的注释,例如

@XmlAttribute
public String getDescription() {
   return "";
}

当xml文件中的属性名称为时,此方法有效description但是,使用jakarta.xml,我必须添加属性的名称:

@XmlAttribute(name="description")
public String getDescription() {
   return "";
}

以防万一,其他人也会遇到同样的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不使用gradle或Maven或Eclipse的情况下将jar文件添加到Java项目

Maven:将资源包含到JAR中

如何在不编辑的情况下将.js文件包含到项目的所有jsp页面中?

如何在不使用库的情况下将lexicographer id查找到WorNet的nt文件中

Gradle Multiproject Build:如何在不创建伪项目的情况下将WAR项目的JAR包含到另一个WAR中

有没有一种方法可以在不使用“ ../”的情况下将文件包含在多个目录中

如何在不使用 JavaScript 中的输入类型文件的情况下读取包含 html 的文本文件?

Jaxb在不使用getter / setter的情况下取消编组

如何在不使用库的情况下将默认名称“选择文件”更改为“选择文档”?

无法将Maven的库包含到Android Studio中

如何在不重新定义变量的情况下将 Javascript 样式属性包含到变量中?

如何使用 Gradle 将 jar 中的所有文件包含到战争中

如何在不使用文件路径的情况下从gridview中的数据库中提取图像

如何在不使用IDE的情况下使用其他资源创建.jar文件

如何在不使用数据库的情况下将数据对象保存在数据网格中

是否可以在不使用Java中的日历库的情况下将秒添加到当前日期?

在不使用python中的库的情况下,将两个不同大小的元素明智的列表相乘

如何在不使用模型的情况下将Django集成到现有数据库中

如何在不使用 JSON 和 GSON 的情况下将 HashMap 保存在 Room 数据库中?

使用GNU make将Java内部类文件包含到JAR中

如何在不使用Java -jar的情况下运行Java可执行文件

在不使用github存储库的情况下创建库

python - 如何在不使用kv文件的情况下使用python中的for循环将id设置为标签?

将头文件包含到静态库中

如何在不使用任何模拟库的情况下模拟iOS Swift中的系统库?

如何在不使用ADD或COPY指令的情况下将文件添加到Dockerfile中的映像

如何在不使用shell的情况下将multipe文件馈送到Java中的命令行

如何在显示文件中不使用if语句和foreach的情况下将数据传递到视图?

我可以在不使用R的情况下将.rda文件转换为python中的pandas数据框吗?