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");