diff --git a/nifi-assembly/pom.xml b/nifi-assembly/pom.xml
index 164b01a2d6..5f041f9204 100755
--- a/nifi-assembly/pom.xml
+++ b/nifi-assembly/pom.xml
@@ -745,6 +745,34 @@ language governing permissions and limitations under the License. -->
1.10.0-SNAPSHOT
nar
+
+
+
+
+ javax.xml.bind
+ jaxb-api
+ 2.3.0
+
+
+ com.sun.xml.bind
+ jaxb-impl
+ 2.3.0
+
+
+ com.sun.xml.bind
+ jaxb-core
+ 2.3.0
+
+
+ javax.annotation
+ javax.annotation-api
+ 1.3.2
+
+
+ javax.activation
+ javax.activation-api
+ 1.2.0
+
@@ -992,6 +1020,13 @@ language governing permissions and limitations under the License. -->
which are also not in bootstrap -->
org.apache.nifi:nifi-resources
org.apache.nifi:nifi-docs
+
+
+ javax.xml.bind:jaxb-api
+ com.sun.xml.bind:jaxb-impl
+ com.sun.xml.bind:jaxb-core
+ javax.activation:javax.activation-api
+ javax.annotation:javax.annotation-api
@@ -1030,6 +1065,19 @@ language governing permissions and limitations under the License. -->
+
+
+ /opt/nifi/nifi-${project.version}/lib/java11
+
+
+ javax.xml.bind:jaxb-api
+ com.sun.xml.bind:jaxb-impl
+ com.sun.xml.bind:jaxb-core
+ javax.activation:javax.activation-api
+ javax.annotation:javax.annotation-api
+
+
+
/opt/nifi/nifi-${project.version}/docs
diff --git a/nifi-assembly/src/main/assembly/common.xml b/nifi-assembly/src/main/assembly/common.xml
index cad953d72d..e22d566625 100644
--- a/nifi-assembly/src/main/assembly/common.xml
+++ b/nifi-assembly/src/main/assembly/common.xml
@@ -31,6 +31,24 @@
+
+
+
+ runtime
+ false
+ lib/java11
+ 0770
+ 0664
+ true
+
+ javax.xml.bind:jaxb-api
+ com.sun.xml.bind:jaxb-impl
+ com.sun.xml.bind:jaxb-core
+ javax.activation:javax.activation-api
+ javax.annotation:javax.annotation-api
+
+
+
runtime
diff --git a/nifi-assembly/src/main/assembly/dependencies.xml b/nifi-assembly/src/main/assembly/dependencies.xml
index c6dd23cae6..f804e7bc31 100644
--- a/nifi-assembly/src/main/assembly/dependencies.xml
+++ b/nifi-assembly/src/main/assembly/dependencies.xml
@@ -35,6 +35,14 @@
nifi-bootstrap
nifi-resources
nifi-docs
+
+
+
+ javax.xml.bind:jaxb-api
+ com.sun.xml.bind:jaxb-impl
+ com.sun.xml.bind:jaxb-core
+ javax.activation:javax.activation-api
+ javax.annotation:javax.annotation-api
diff --git a/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java b/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java
index 953cdce799..78e7019175 100644
--- a/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java
+++ b/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java
@@ -49,6 +49,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Objects;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.ExecutorService;
@@ -993,6 +994,23 @@ public class RunNiFi {
cpFiles.add(file.getAbsolutePath());
}
+ String runtimeJavaVersion = System.getProperty("java.version");
+ defaultLogger.info("Runtime Java version: {}", runtimeJavaVersion);
+ if (Integer.parseInt(runtimeJavaVersion.substring(0, runtimeJavaVersion.indexOf('.'))) >= 11) {
+ /* If running on Java 11 or greater, add the JAXB/activation/annotation libs to the classpath.
+ *
+ * TODO: Once the minimum Java version requirement of NiFi is 11, this processing should be removed.
+ * JAXB/activation/annotation will be added as an actual dependency via pom.xml.
+ */
+ final String libJava11Filename = replaceNull(props.get("lib.dir"), "./lib").trim() + "/java11";
+ File libJava11Dir = getFile(libJava11Filename, workingDir);
+ if (libJava11Dir.exists()) {
+ for (final File file : Objects.requireNonNull(libJava11Dir.listFiles((dir, filename) -> filename.toLowerCase().endsWith(".jar")))) {
+ cpFiles.add(file.getAbsolutePath());
+ }
+ }
+ }
+
final StringBuilder classPathBuilder = new StringBuilder();
for (int i = 0; i < cpFiles.size(); i++) {
final String filename = cpFiles.get(i);
@@ -1032,8 +1050,8 @@ public class RunNiFi {
cmd.add("-Dnifi.bootstrap.listen.port=" + listenPort);
cmd.add("-Dapp=NiFi");
cmd.add("-Dorg.apache.nifi.bootstrap.config.log.dir=" + nifiLogDir);
- if (!System.getProperty("java.version").startsWith("1.")) {
- // running on Java 9+, java.xml.bind module must be made available
+ if (runtimeJavaVersion.startsWith("9") || runtimeJavaVersion.startsWith("10")) {
+ // running on Java 9 or 10, internal module java.xml.bind module must be made available
cmd.add("--add-modules=java.xml.bind");
}
cmd.add("org.apache.nifi.NiFi");