This is an automated email from the ASF dual-hosted git repository.

mthomsen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/master by this push:
     new c158764  NIFI-6897: making nifi-toolkit >= java 8 compliant fixing 
cli.bat cygwin fix: on windows ${JAVA} can have spaces in it. ...must wrap in 
quotes some jvms doesn't print a dot after the major version
c158764 is described below

commit c15876494a7fb9ea5eb6cacf02a6ee5f46faa333
Author: Endre Zoltan Kovacs <[email protected]>
AuthorDate: Tue Nov 26 17:50:55 2019 +0100

    NIFI-6897: making nifi-toolkit >= java 8 compliant
    fixing cli.bat
    cygwin fix: on windows ${JAVA} can have spaces in it.
    ...must wrap in quotes
    some jvms doesn't print a dot after the major version
    
    ...removing that from patter matching
    
    This closes #3908
    
    Signed-off-by: Mike Thomsen <[email protected]>
---
 nifi-toolkit/nifi-toolkit-assembly/pom.xml         | 28 +++++++++++
 .../src/main/assembly/dependencies.xml             | 26 ++++++++++
 .../src/main/resources/bin/cli.bat                 | 46 ++++++++++++++----
 .../src/main/resources/bin/cli.sh                  | 32 ++++++++++++-
 nifi-toolkit/pom.xml                               | 56 +++++++++++++++++++++-
 5 files changed, 177 insertions(+), 11 deletions(-)

diff --git a/nifi-toolkit/nifi-toolkit-assembly/pom.xml 
b/nifi-toolkit/nifi-toolkit-assembly/pom.xml
index b9cf707..d5a74f9 100644
--- a/nifi-toolkit/nifi-toolkit-assembly/pom.xml
+++ b/nifi-toolkit/nifi-toolkit-assembly/pom.xml
@@ -112,6 +112,34 @@ language governing permissions and limitations under the 
License. -->
             <artifactId>javax.servlet-api</artifactId>
             <scope>compile</scope>
         </dependency>
+
+        <!-- dependencies for jaxb/activation/annotation for running NiFi on 
Java 11 -->
+        <!-- TODO: remove these once minimum Java version is 11 -->
+        <dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+            <version>2.3.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-impl</artifactId>
+            <version>2.3.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-core</artifactId>
+            <version>2.3.0</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+            <version>1.3.2</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>javax.activation-api</artifactId>
+            <version>1.2.0</version>
+        </dependency>
     </dependencies>
 
 
diff --git 
a/nifi-toolkit/nifi-toolkit-assembly/src/main/assembly/dependencies.xml 
b/nifi-toolkit/nifi-toolkit-assembly/src/main/assembly/dependencies.xml
index a96953b..b4f15ea 100644
--- a/nifi-toolkit/nifi-toolkit-assembly/src/main/assembly/dependencies.xml
+++ b/nifi-toolkit/nifi-toolkit-assembly/src/main/assembly/dependencies.xml
@@ -32,8 +32,34 @@
             <useProjectArtifact>false</useProjectArtifact>
             <directoryMode>0770</directoryMode>
             <fileMode>0660</fileMode>
+            <excludes>
+                <!-- exclude jaxb/activation libs from lib, they'll be 
included in the java11 subdir -->
+                <!-- TODO: remove these once minimum Java version is 11 -->
+                <exclude>javax.xml.bind:jaxb-api</exclude>
+                <exclude>com.sun.xml.bind:jaxb-impl</exclude>
+                <exclude>com.sun.xml.bind:jaxb-core</exclude>
+                <exclude>javax.activation:javax.activation-api</exclude>
+            </excludes>
+        </dependencySet>
+        <!-- Write out the bootstrap libs for java11 to its own dir -->
+        <!-- TODO: remove this dependency set once minimum Java version is 11 
-->
+        <dependencySet>
+            <scope>runtime</scope>
+            <useProjectArtifact>false</useProjectArtifact>
+            <outputDirectory>lib/java11</outputDirectory>
+            <directoryMode>0770</directoryMode>
+            <fileMode>0664</fileMode>
+            <useTransitiveFiltering>true</useTransitiveFiltering>
+            <includes>
+                <include>javax.xml.bind:jaxb-api</include>
+                <include>com.sun.xml.bind:jaxb-impl</include>
+                <include>com.sun.xml.bind:jaxb-core</include>
+                <include>javax.activation:javax.activation-api</include>
+            </includes>
         </dependencySet>
     </dependencySets>
+
+
     <fileSets>
         <fileSet>
             <directory>${project.basedir}/src/main/resources/bin</directory>
diff --git a/nifi-toolkit/nifi-toolkit-assembly/src/main/resources/bin/cli.bat 
b/nifi-toolkit/nifi-toolkit-assembly/src/main/resources/bin/cli.bat
index 46b7363..f342a19 100644
--- a/nifi-toolkit/nifi-toolkit-assembly/src/main/resources/bin/cli.bat
+++ b/nifi-toolkit/nifi-toolkit-assembly/src/main/resources/bin/cli.bat
@@ -15,27 +15,55 @@ rem    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.
 rem    See the License for the specific language governing permissions and
 rem    limitations under the License.
 rem
-
 rem Use JAVA_HOME if it's set; otherwise, just use java
-
 if "%JAVA_HOME%" == "" goto noJavaHome
 if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
 set JAVA_EXE=%JAVA_HOME%\bin\java.exe
 goto startConfig
-
 :noJavaHome
 echo The JAVA_HOME environment variable is not defined correctly.
 echo Instead the PATH will be used to find the java executable.
 echo.
 set JAVA_EXE=java
 goto startConfig
-
 :startConfig
-set LIB_DIR=%~dp0..\classpath;%~dp0..\lib
-
+set LIB_DIR=%~dp0..\classpath;%~dp0..\lib\
+if "%NIFI_TOOLKIT_HOME%" == "" (
+    set NIFI_TOOLKIT_HOME=%~dp0..
+) else (
+    SET trailing_char=%NIFI_TOOLKIT_HOME:~-1%
+    if "%trailing_char%" == "\" (set 
NIFI_TOOLKIT_HOME=%NIFI_TOOLKIT_HOME:~0,-1%)
+)
 if "%JAVA_OPTS%" == "" set JAVA_OPTS=-Xms128m -Xmx256m
+for /f tokens^=2-5^ delims^=.-+_^" %%j in ('"%JAVA_EXE%" -fullversion 2^>^&1') 
do (
+    set "java_version=%%j%%k%%l%%m"
+    set "major=%%j"
+    set "minor=%%k"
+    set "micro=%%l"
+    set "build=%%m"
+)
+set compatibility_arg=
+set compatibility_lib=
+if %major% EQU 9 (
+    set compatibility_arg=--add-modules=java.xml.bind
+    echo Detected Java 9 runtime version
+) else if %major% EQU 10 (
+    set compatibility_arg=--add-modules=java.xml.bind
+    echo Detected Java 10 runtime version
+) else if %major% GEQ 11 (
+    set compatibility_lib=%NIFI_TOOLKIT_HOME%\lib\java11\
+    echo Detected java 11 or later runtime version: %major%
+)
+if not "%compatibility_arg%" == "" (set JAVA_OPTS=%JAVA_OPTS% 
%compatibility_arg%)
+if not "%compatibility_lib%" == "" (
+   set LIB_DIR="%LIB_DIR%*;%compatibility_lib%*"
+) else (
+   set LIB_DIR="%LIB_DIR%*"
+)
 
-SET JAVA_PARAMS=-cp %LIB_DIR%\* %JAVA_OPTS% org.apache.nifi.toolkit.cli.CLIMain
-
-cmd.exe /C ""%JAVA_EXE%" %JAVA_PARAMS% %* ""
+rem remove surrounding quotes
+SET LIB_DIR=%LIB_DIR:"=%
+SET JAVA_OPTS=%JAVA_OPTS:"=%
 
+SET JAVA_PARAMS=-cp %LIB_DIR% %JAVA_OPTS% org.apache.nifi.toolkit.cli.CLIMain
+cmd.exe /C ""%JAVA_EXE%" %JAVA_PARAMS% %* "
\ No newline at end of file
diff --git a/nifi-toolkit/nifi-toolkit-assembly/src/main/resources/bin/cli.sh 
b/nifi-toolkit/nifi-toolkit-assembly/src/main/resources/bin/cli.sh
index 5093859..9ba36d5 100644
--- a/nifi-toolkit/nifi-toolkit-assembly/src/main/resources/bin/cli.sh
+++ b/nifi-toolkit/nifi-toolkit-assembly/src/main/resources/bin/cli.sh
@@ -88,6 +88,33 @@ locateJava() {
     fi
 }
 
+apply_java_compatibility() {
+    compatibility_arg=""
+    compatibility_lib=""
+    java_version="$("${JAVA}" -version 2>&1 | head -n 1 | awk -F '"' '{print 
$2}')"
+
+    case "$java_version" in
+        9*|10*)
+            compatibility_arg="--add-modules=java.xml.bind"
+            ;;
+        [1-9][1-9]*)
+            # java versions 11-99
+            compatibility_lib="${NIFI_TOOLKIT_HOME}/lib/java11/*"
+            ;;
+        1.*)
+            ;;
+    esac
+
+    JAVA_OPTS="${JAVA_OPTS:--Xms128m -Xmx256m}"
+    if [ "x${compatibility_arg}" != "x" ]; then
+        JAVA_OPTS="${JAVA_OPTS} $compatibility_arg"
+    fi
+
+    if [ "x${compatibility_lib}" != "x" ]; then
+        CLASSPATH="$CLASSPATH$classpath_separator$compatibility_lib"
+    fi
+}
+
 init() {
     # Determine if there is special OS handling we must perform
     detectOS
@@ -101,17 +128,20 @@ run() {
 
     sudo_cmd_prefix=""
     if $cygwin; then
+        classpath_separator=";"
         NIFI_TOOLKIT_HOME=$(cygpath --path --windows "${NIFI_TOOLKIT_HOME}")
         CLASSPATH="$NIFI_TOOLKIT_HOME/classpath;$(cygpath --path --windows 
"${LIBS}")"
     else
+        classpath_separator=":"
         CLASSPATH="$NIFI_TOOLKIT_HOME/classpath:${LIBS}"
     fi
 
    export JAVA_HOME="$JAVA_HOME"
    export NIFI_TOOLKIT_HOME="$NIFI_TOOLKIT_HOME"
+   apply_java_compatibility
 
    umask 0077
-   exec "${JAVA}" -cp "${CLASSPATH}" ${JAVA_OPTS:--Xms128m -Xmx256m} 
org.apache.nifi.toolkit.cli.CLIMain "$@"
+   exec "${JAVA}" -cp "${CLASSPATH}" ${JAVA_OPTS} 
org.apache.nifi.toolkit.cli.CLIMain "$@"
 }
 
 
diff --git a/nifi-toolkit/pom.xml b/nifi-toolkit/pom.xml
index 04ee821..026c1f8 100644
--- a/nifi-toolkit/pom.xml
+++ b/nifi-toolkit/pom.xml
@@ -59,7 +59,6 @@
                 <version>3.7.1.Final</version>
             </dependency>
         </dependencies>
-
     </dependencyManagement>
     <dependencies>
         <dependency>
@@ -67,4 +66,59 @@
             <artifactId>slf4j-log4j12</artifactId>
         </dependency>
     </dependencies>
+    <profiles>
+        <profile>
+            <!-- This profile, activating when compiling on Java versions 
above 
+                1.8, provides configuration changes to allow NiFi to be 
compiled on those 
+                JDKs. -->
+            <id>jigsaw</id>
+            <activation>
+                <jdk>(1.8,)</jdk>
+            </activation>
+            <properties>
+                <maven.compiler.source>11</maven.compiler.source>
+                <maven.compiler.target>11</maven.compiler.target>
+            </properties>
+            <build>
+                <pluginManagement>
+                    <plugins>
+                        <plugin>
+                            <groupId>org.jvnet.jaxb2.maven2</groupId>
+                            <artifactId>maven-jaxb2-plugin</artifactId>
+                            <version>0.14.0</version>
+                        </plugin>
+                    </plugins>
+                </pluginManagement>
+            </build>
+            <dependencyManagement>
+                <dependencies>
+                    <dependency>
+                        <groupId>javax.xml.bind</groupId>
+                        <artifactId>jaxb-api</artifactId>
+                        <version>2.3.0</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>com.sun.xml.bind</groupId>
+                        <artifactId>jaxb-core</artifactId>
+                        <version>2.3.0</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>com.sun.xml.bind</groupId>
+                        <artifactId>jaxb-impl</artifactId>
+                        <version>2.3.0</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>com.sun.activation</groupId>
+                        <artifactId>javax.activation</artifactId>
+                        <version>1.2.0</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>javax.annotation</groupId>
+                        <artifactId>javax.annotation-api</artifactId>
+                        <version>1.3.2</version>
+                    </dependency>
+                </dependencies>
+            </dependencyManagement>
+        </profile>
+    </profiles>
 </project>

Reply via email to