如何将 JAXB 导入 Java 11 IntelliJ (Gradle) 项目?
How can I import JAXB into a Java 11 IntelliJ (Gradle) project?
我一直在使用 JDK 8 的 Java 项目中使用 JAXB。
迁移到 JDK 11 后,不再识别 JAXB 包名称。
我也没有找到将 JAXB 添加为 gradle 中的依赖项的方法。
如何将 JAXB 导入到我的项目中?
您需要包含 JAXB API 并从 JAXB 实现中选择一个,因为默认情况下 JAXB 不再包含在 JDK 11 中。您需要向 build.gradle
.
首先:
compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
如果您决定使用例如 MOXy,则类似:
compile group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.moxy',
version: '2.7.3'
这个使用 MOXy 的示例还需要 jaxb.properties
包含有关 JAXBContextFactory
信息的文件(参见 here chapter 2.1):
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
这样做的好处好像是:
Because you do not need to change any application code, you can easily switch between different JAXB implementations.
我的 android flutter 项目有一个构建问题,我花了好几个小时来解决这个问题。我知道 Java 11 不支持开箱即用的某些 JAR 文件,因此我们必须包含一些依赖项。但这并不简单。我将此归结为 JAXB 库中的某个版本问题。最后,这是我对 android/build.gradle 文件的工作解决方案。
我添加了一些存储库(如 google、mavenCentral),并且 2.3.0 的 jaxb-api 版本也是有效的。我记得当时 2.3.1 不工作......但当我现在尝试时它工作。真奇怪。显然,我不是这方面的专家。我很庆幸它终于成功了......我正在展示 android/build.gradle 的价值。希望这对某人有所帮助。
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
mavenCentral()
maven {
url = uri("https://repo1.maven.org/maven2/")
}
jcenter()
}
dependencies {
classpath "javax.xml.bind:jaxb-api:2.3.0"
classpath 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.2'
classpath 'org.glassfish.jaxb:jaxb-runtime:2.3.2'
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
maven {
url = uri("https://repo1.maven.org/maven2/")
}
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
我一直在使用 JDK 8 的 Java 项目中使用 JAXB。 迁移到 JDK 11 后,不再识别 JAXB 包名称。 我也没有找到将 JAXB 添加为 gradle 中的依赖项的方法。 如何将 JAXB 导入到我的项目中?
您需要包含 JAXB API 并从 JAXB 实现中选择一个,因为默认情况下 JAXB 不再包含在 JDK 11 中。您需要向 build.gradle
.
首先:
compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
如果您决定使用例如 MOXy,则类似:
compile group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.moxy',
version: '2.7.3'
这个使用 MOXy 的示例还需要 jaxb.properties
包含有关 JAXBContextFactory
信息的文件(参见 here chapter 2.1):
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
这样做的好处好像是:
Because you do not need to change any application code, you can easily switch between different JAXB implementations.
我的 android flutter 项目有一个构建问题,我花了好几个小时来解决这个问题。我知道 Java 11 不支持开箱即用的某些 JAR 文件,因此我们必须包含一些依赖项。但这并不简单。我将此归结为 JAXB 库中的某个版本问题。最后,这是我对 android/build.gradle 文件的工作解决方案。 我添加了一些存储库(如 google、mavenCentral),并且 2.3.0 的 jaxb-api 版本也是有效的。我记得当时 2.3.1 不工作......但当我现在尝试时它工作。真奇怪。显然,我不是这方面的专家。我很庆幸它终于成功了......我正在展示 android/build.gradle 的价值。希望这对某人有所帮助。
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
mavenCentral()
maven {
url = uri("https://repo1.maven.org/maven2/")
}
jcenter()
}
dependencies {
classpath "javax.xml.bind:jaxb-api:2.3.0"
classpath 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.2'
classpath 'org.glassfish.jaxb:jaxb-runtime:2.3.2'
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
maven {
url = uri("https://repo1.maven.org/maven2/")
}
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}