Commit 4d6dc90e684e554cb985f0326e154e44644b453b

Authored by 杜云山
0 parents
Exists in master

feat: springboot加载外部jar示例

.gitignore 0 → 100644
  1 +++ a/.gitignore
... ... @@ -0,0 +1,25 @@
  1 +/target/
  2 +!.mvn/wrapper/maven-wrapper.jar
  3 +
  4 +### STS ###
  5 +.apt_generated
  6 +.classpath
  7 +.factorypath
  8 +.project
  9 +.settings
  10 +.springBeans
  11 +.sts4-cache
  12 +
  13 +### IntelliJ IDEA ###
  14 +.idea
  15 +*.iws
  16 +*.iml
  17 +*.ipr
  18 +
  19 +### NetBeans ###
  20 +/nbproject/private/
  21 +/build/
  22 +/nbbuild/
  23 +/dist/
  24 +/nbdist/
  25 +/.nb-gradle/
0 26 \ No newline at end of file
... ...
.mvn/wrapper/maven-wrapper.jar 0 → 100644
No preview for this file type
.mvn/wrapper/maven-wrapper.properties 0 → 100644
  1 +++ a/.mvn/wrapper/maven-wrapper.properties
... ... @@ -0,0 +1 @@
  1 +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip
... ...
LICENSE 0 → 100644
  1 +++ a/LICENSE
... ... @@ -0,0 +1,24 @@
  1 +This is free and unencumbered software released into the public domain.
  2 +
  3 +Anyone is free to copy, modify, publish, use, compile, sell, or
  4 +distribute this software, either in source code form or as a compiled
  5 +binary, for any purpose, commercial or non-commercial, and by any
  6 +means.
  7 +
  8 +In jurisdictions that recognize copyright laws, the author or authors
  9 +of this software dedicate any and all copyright interest in the
  10 +software to the public domain. We make this dedication for the benefit
  11 +of the public at large and to the detriment of our heirs and
  12 +successors. We intend this dedication to be an overt act of
  13 +relinquishment in perpetuity of all present and future rights to this
  14 +software under copyright law.
  15 +
  16 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  17 +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  18 +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  19 +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  20 +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  21 +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  22 +OTHER DEALINGS IN THE SOFTWARE.
  23 +
  24 +For more information, please refer to <http://unlicense.org>
... ...
externallibs/devices-aeroflex-0.0.1-SNAPSHOT.jar 0 → 100644
No preview for this file type
externallibs/h2-1.4.197.jar 0 → 100644
No preview for this file type
externallibs/lamta-share-device-client-0.0.1-SNAPSHOT.jar 0 → 100644
No preview for this file type
externallibs/lamta-share-device-core-0.0.1-SNAPSHOT.jar 0 → 100644
No preview for this file type
externallibs/mina-core-2.1.4.jar 0 → 100644
No preview for this file type
mvnw 0 → 100644
  1 +++ a/mvnw
... ... @@ -0,0 +1,225 @@
  1 +#!/bin/sh
  2 +# ----------------------------------------------------------------------------
  3 +# Licensed to the Apache Software Foundation (ASF) under one
  4 +# or more contributor license agreements. See the NOTICE file
  5 +# distributed with this work for additional information
  6 +# regarding copyright ownership. The ASF licenses this file
  7 +# to you under the Apache License, Version 2.0 (the
  8 +# "License"); you may not use this file except in compliance
  9 +# with the License. You may obtain a copy of the License at
  10 +#
  11 +# http://www.apache.org/licenses/LICENSE-2.0
  12 +#
  13 +# Unless required by applicable law or agreed to in writing,
  14 +# software distributed under the License is distributed on an
  15 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  16 +# KIND, either express or implied. See the License for the
  17 +# specific language governing permissions and limitations
  18 +# under the License.
  19 +# ----------------------------------------------------------------------------
  20 +
  21 +# ----------------------------------------------------------------------------
  22 +# Maven2 Start Up Batch script
  23 +#
  24 +# Required ENV vars:
  25 +# ------------------
  26 +# JAVA_HOME - location of a JDK home dir
  27 +#
  28 +# Optional ENV vars
  29 +# -----------------
  30 +# M2_HOME - location of maven2's installed home dir
  31 +# MAVEN_OPTS - parameters passed to the Java VM when running Maven
  32 +# e.g. to debug Maven itself, use
  33 +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
  34 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
  35 +# ----------------------------------------------------------------------------
  36 +
  37 +if [ -z "$MAVEN_SKIP_RC" ] ; then
  38 +
  39 + if [ -f /etc/mavenrc ] ; then
  40 + . /etc/mavenrc
  41 + fi
  42 +
  43 + if [ -f "$HOME/.mavenrc" ] ; then
  44 + . "$HOME/.mavenrc"
  45 + fi
  46 +
  47 +fi
  48 +
  49 +# OS specific support. $var _must_ be set to either true or false.
  50 +cygwin=false;
  51 +darwin=false;
  52 +mingw=false
  53 +case "`uname`" in
  54 + CYGWIN*) cygwin=true ;;
  55 + MINGW*) mingw=true;;
  56 + Darwin*) darwin=true
  57 + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
  58 + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
  59 + if [ -z "$JAVA_HOME" ]; then
  60 + if [ -x "/usr/libexec/java_home" ]; then
  61 + export JAVA_HOME="`/usr/libexec/java_home`"
  62 + else
  63 + export JAVA_HOME="/Library/Java/Home"
  64 + fi
  65 + fi
  66 + ;;
  67 +esac
  68 +
  69 +if [ -z "$JAVA_HOME" ] ; then
  70 + if [ -r /etc/gentoo-release ] ; then
  71 + JAVA_HOME=`java-config --jre-home`
  72 + fi
  73 +fi
  74 +
  75 +if [ -z "$M2_HOME" ] ; then
  76 + ## resolve links - $0 may be a link to maven's home
  77 + PRG="$0"
  78 +
  79 + # need this for relative symlinks
  80 + while [ -h "$PRG" ] ; do
  81 + ls=`ls -ld "$PRG"`
  82 + link=`expr "$ls" : '.*-> \(.*\)$'`
  83 + if expr "$link" : '/.*' > /dev/null; then
  84 + PRG="$link"
  85 + else
  86 + PRG="`dirname "$PRG"`/$link"
  87 + fi
  88 + done
  89 +
  90 + saveddir=`pwd`
  91 +
  92 + M2_HOME=`dirname "$PRG"`/..
  93 +
  94 + # make it fully qualified
  95 + M2_HOME=`cd "$M2_HOME" && pwd`
  96 +
  97 + cd "$saveddir"
  98 + # echo Using m2 at $M2_HOME
  99 +fi
  100 +
  101 +# For Cygwin, ensure paths are in UNIX format before anything is touched
  102 +if $cygwin ; then
  103 + [ -n "$M2_HOME" ] &&
  104 + M2_HOME=`cygpath --unix "$M2_HOME"`
  105 + [ -n "$JAVA_HOME" ] &&
  106 + JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  107 + [ -n "$CLASSPATH" ] &&
  108 + CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
  109 +fi
  110 +
  111 +# For Migwn, ensure paths are in UNIX format before anything is touched
  112 +if $mingw ; then
  113 + [ -n "$M2_HOME" ] &&
  114 + M2_HOME="`(cd "$M2_HOME"; pwd)`"
  115 + [ -n "$JAVA_HOME" ] &&
  116 + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
  117 + # TODO classpath?
  118 +fi
  119 +
  120 +if [ -z "$JAVA_HOME" ]; then
  121 + javaExecutable="`which javac`"
  122 + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
  123 + # readlink(1) is not available as standard on Solaris 10.
  124 + readLink=`which readlink`
  125 + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
  126 + if $darwin ; then
  127 + javaHome="`dirname \"$javaExecutable\"`"
  128 + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
  129 + else
  130 + javaExecutable="`readlink -f \"$javaExecutable\"`"
  131 + fi
  132 + javaHome="`dirname \"$javaExecutable\"`"
  133 + javaHome=`expr "$javaHome" : '\(.*\)/bin'`
  134 + JAVA_HOME="$javaHome"
  135 + export JAVA_HOME
  136 + fi
  137 + fi
  138 +fi
  139 +
  140 +if [ -z "$JAVACMD" ] ; then
  141 + if [ -n "$JAVA_HOME" ] ; then
  142 + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
  143 + # IBM's JDK on AIX uses strange locations for the executables
  144 + JAVACMD="$JAVA_HOME/jre/sh/java"
  145 + else
  146 + JAVACMD="$JAVA_HOME/bin/java"
  147 + fi
  148 + else
  149 + JAVACMD="`which java`"
  150 + fi
  151 +fi
  152 +
  153 +if [ ! -x "$JAVACMD" ] ; then
  154 + echo "Error: JAVA_HOME is not defined correctly." >&2
  155 + echo " We cannot execute $JAVACMD" >&2
  156 + exit 1
  157 +fi
  158 +
  159 +if [ -z "$JAVA_HOME" ] ; then
  160 + echo "Warning: JAVA_HOME environment variable is not set."
  161 +fi
  162 +
  163 +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
  164 +
  165 +# traverses directory structure from process work directory to filesystem root
  166 +# first directory with .mvn subdirectory is considered project base directory
  167 +find_maven_basedir() {
  168 +
  169 + if [ -z "$1" ]
  170 + then
  171 + echo "Path not specified to find_maven_basedir"
  172 + return 1
  173 + fi
  174 +
  175 + basedir="$1"
  176 + wdir="$1"
  177 + while [ "$wdir" != '/' ] ; do
  178 + if [ -d "$wdir"/.mvn ] ; then
  179 + basedir=$wdir
  180 + break
  181 + fi
  182 + # workaround for JBEAP-8937 (on Solaris 10/Sparc)
  183 + if [ -d "${wdir}" ]; then
  184 + wdir=`cd "$wdir/.."; pwd`
  185 + fi
  186 + # end of workaround
  187 + done
  188 + echo "${basedir}"
  189 +}
  190 +
  191 +# concatenates all lines of a file
  192 +concat_lines() {
  193 + if [ -f "$1" ]; then
  194 + echo "$(tr -s '\n' ' ' < "$1")"
  195 + fi
  196 +}
  197 +
  198 +BASE_DIR=`find_maven_basedir "$(pwd)"`
  199 +if [ -z "$BASE_DIR" ]; then
  200 + exit 1;
  201 +fi
  202 +
  203 +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
  204 +echo $MAVEN_PROJECTBASEDIR
  205 +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
  206 +
  207 +# For Cygwin, switch paths to Windows format before running java
  208 +if $cygwin; then
  209 + [ -n "$M2_HOME" ] &&
  210 + M2_HOME=`cygpath --path --windows "$M2_HOME"`
  211 + [ -n "$JAVA_HOME" ] &&
  212 + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  213 + [ -n "$CLASSPATH" ] &&
  214 + CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  215 + [ -n "$MAVEN_PROJECTBASEDIR" ] &&
  216 + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
  217 +fi
  218 +
  219 +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
  220 +
  221 +exec "$JAVACMD" \
  222 + $MAVEN_OPTS \
  223 + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
  224 + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  225 + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
... ...
mvnw.cmd 0 → 100644
  1 +++ a/mvnw.cmd
... ... @@ -0,0 +1,143 @@
  1 +@REM ----------------------------------------------------------------------------
  2 +@REM Licensed to the Apache Software Foundation (ASF) under one
  3 +@REM or more contributor license agreements. See the NOTICE file
  4 +@REM distributed with this work for additional information
  5 +@REM regarding copyright ownership. The ASF licenses this file
  6 +@REM to you under the Apache License, Version 2.0 (the
  7 +@REM "License"); you may not use this file except in compliance
  8 +@REM with the License. You may obtain a copy of the License at
  9 +@REM
  10 +@REM http://www.apache.org/licenses/LICENSE-2.0
  11 +@REM
  12 +@REM Unless required by applicable law or agreed to in writing,
  13 +@REM software distributed under the License is distributed on an
  14 +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15 +@REM KIND, either express or implied. See the License for the
  16 +@REM specific language governing permissions and limitations
  17 +@REM under the License.
  18 +@REM ----------------------------------------------------------------------------
  19 +
  20 +@REM ----------------------------------------------------------------------------
  21 +@REM Maven2 Start Up Batch script
  22 +@REM
  23 +@REM Required ENV vars:
  24 +@REM JAVA_HOME - location of a JDK home dir
  25 +@REM
  26 +@REM Optional ENV vars
  27 +@REM M2_HOME - location of maven2's installed home dir
  28 +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
  29 +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
  30 +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
  31 +@REM e.g. to debug Maven itself, use
  32 +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
  33 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
  34 +@REM ----------------------------------------------------------------------------
  35 +
  36 +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
  37 +@echo off
  38 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
  39 +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
  40 +
  41 +@REM set %HOME% to equivalent of $HOME
  42 +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
  43 +
  44 +@REM Execute a user defined script before this one
  45 +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
  46 +@REM check for pre script, once with legacy .bat ending and once with .cmd ending
  47 +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
  48 +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
  49 +:skipRcPre
  50 +
  51 +@setlocal
  52 +
  53 +set ERROR_CODE=0
  54 +
  55 +@REM To isolate internal variables from possible post scripts, we use another setlocal
  56 +@setlocal
  57 +
  58 +@REM ==== START VALIDATION ====
  59 +if not "%JAVA_HOME%" == "" goto OkJHome
  60 +
  61 +echo.
  62 +echo Error: JAVA_HOME not found in your environment. >&2
  63 +echo Please set the JAVA_HOME variable in your environment to match the >&2
  64 +echo location of your Java installation. >&2
  65 +echo.
  66 +goto error
  67 +
  68 +:OkJHome
  69 +if exist "%JAVA_HOME%\bin\java.exe" goto init
  70 +
  71 +echo.
  72 +echo Error: JAVA_HOME is set to an invalid directory. >&2
  73 +echo JAVA_HOME = "%JAVA_HOME%" >&2
  74 +echo Please set the JAVA_HOME variable in your environment to match the >&2
  75 +echo location of your Java installation. >&2
  76 +echo.
  77 +goto error
  78 +
  79 +@REM ==== END VALIDATION ====
  80 +
  81 +:init
  82 +
  83 +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
  84 +@REM Fallback to current working directory if not found.
  85 +
  86 +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
  87 +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
  88 +
  89 +set EXEC_DIR=%CD%
  90 +set WDIR=%EXEC_DIR%
  91 +:findBaseDir
  92 +IF EXIST "%WDIR%"\.mvn goto baseDirFound
  93 +cd ..
  94 +IF "%WDIR%"=="%CD%" goto baseDirNotFound
  95 +set WDIR=%CD%
  96 +goto findBaseDir
  97 +
  98 +:baseDirFound
  99 +set MAVEN_PROJECTBASEDIR=%WDIR%
  100 +cd "%EXEC_DIR%"
  101 +goto endDetectBaseDir
  102 +
  103 +:baseDirNotFound
  104 +set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
  105 +cd "%EXEC_DIR%"
  106 +
  107 +:endDetectBaseDir
  108 +
  109 +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
  110 +
  111 +@setlocal EnableExtensions EnableDelayedExpansion
  112 +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
  113 +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
  114 +
  115 +:endReadAdditionalConfig
  116 +
  117 +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
  118 +
  119 +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
  120 +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
  121 +
  122 +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
  123 +if ERRORLEVEL 1 goto error
  124 +goto end
  125 +
  126 +:error
  127 +set ERROR_CODE=1
  128 +
  129 +:end
  130 +@endlocal & set ERROR_CODE=%ERROR_CODE%
  131 +
  132 +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
  133 +@REM check for post script, once with legacy .bat ending and once with .cmd ending
  134 +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
  135 +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
  136 +:skipRcPost
  137 +
  138 +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
  139 +if "%MAVEN_BATCH_PAUSE%" == "on" pause
  140 +
  141 +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
  142 +
  143 +exit /B %ERROR_CODE%
... ...
pom.xml 0 → 100644
  1 +++ a/pom.xml
... ... @@ -0,0 +1,66 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4 + <modelVersion>4.0.0</modelVersion>
  5 +
  6 + <groupId>com.example</groupId>
  7 + <artifactId>x</artifactId>
  8 + <version>0.0.1-SNAPSHOT</version>
  9 + <packaging>jar</packaging>
  10 +
  11 + <name>springboot.propertieslauncher</name>
  12 + <description>Demo project for Spring Boot and its usage of PropertiesLauncher</description>
  13 +
  14 + <parent>
  15 + <groupId>org.springframework.boot</groupId>
  16 + <artifactId>spring-boot-starter-parent</artifactId>
  17 + <version>2.1.4.RELEASE</version>
  18 + <relativePath/> <!-- lookup parent from repository -->
  19 + </parent>
  20 +
  21 + <properties>
  22 + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  23 + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  24 + <java.version>11</java.version>
  25 + </properties>
  26 +
  27 + <dependencies>
  28 + <dependency>
  29 + <groupId>org.springframework.boot</groupId>
  30 + <artifactId>spring-boot-starter</artifactId>
  31 + </dependency>
  32 +
  33 + <dependency>
  34 + <!-- this dependency will we provide externally -->
  35 + <!-- but keep it provided, so that we can still execute this spring-boot application in an IDE -->
  36 + <groupId>com.h2database</groupId>
  37 + <artifactId>h2</artifactId>
  38 + <version>1.4.197</version>
  39 + <scope>provided</scope>
  40 + </dependency>
  41 + </dependencies>
  42 +
  43 + <build>
  44 + <plugins>
  45 + <plugin>
  46 + <groupId>org.springframework.boot</groupId>
  47 + <artifactId>spring-boot-maven-plugin</artifactId>
  48 + <configuration>
  49 + <executable>true</executable>
  50 + <layout>ZIP</layout>
  51 + <!-- do not bundle DB driver -->
  52 + <excludeArtifactIds>h2</excludeArtifactIds>
  53 + </configuration>
  54 + <executions>
  55 + <execution>
  56 + <goals>
  57 + <goal>repackage</goal>
  58 + </goals>
  59 + </execution>
  60 + </executions>
  61 + </plugin>
  62 + </plugins>
  63 + </build>
  64 +
  65 +
  66 +</project>
... ...
readme.md 0 → 100644
  1 +++ a/readme.md
... ... @@ -0,0 +1,60 @@
  1 +Example for a self-executable Spring Boot JAR, which accesses a DB driver (or any other 3rd-party JAR) from a external (non-bundled) directory.
  2 +
  3 +This may be useful if you are not allowed to bundle the DB driver with your application.
  4 +
  5 +Tips:
  6 +* Use `ZIP` as layout in `spring-boot-maven-plugin` (to generate the `PropertiesLauncher` entry in the `MANIFEST.MF`)
  7 +* Set `<executable>true</executable>` to prepend a shell script to the resulting JAR
  8 +* See [command line examples](run.sh) for different types of running the JAR using the `loader.path` option
  9 +
  10 +
  11 +## Expected result
  12 +
  13 +Have a look for the output
  14 +
  15 +```
  16 +Try to use external driver
  17 +-------------> Found driver h2 1.4
  18 +```
  19 +in all variants. The same application is started using different types of loading an external jar.
  20 +
  21 +```
  22 +--------------------------
  23 +Variant A via java -jar
  24 +--------------------------
  25 +...
  26 +2019-04-25 22:51:59.934 INFO 26947 --- [ main] com.example.x.Application : Started Application in 6.005 seconds (JVM running for 6.465)
  27 +Try to use external driver
  28 +-------------> Found driver h2 1.4
  29 +
  30 +--------------------------
  31 +Variant B via java -jar
  32 +--------------------------
  33 +...
  34 +2019-04-25 22:52:06.447 INFO 26948 --- [ main] com.example.x.Application : Started Application in 5.996 seconds (JVM running for 6.456)
  35 +Try to use external driver
  36 +-------------> Found driver h2 1.4
  37 +
  38 +------------------------------------------------------------------------------------------------
  39 +Variant C via self-executable and loader.path-configuration from (default-) loader.properties
  40 +------------------------------------------------------------------------------------------------
  41 +...
  42 +Try to use external driver
  43 +-------------> Found driver h2 1.4
  44 +
  45 +--------------------------------------------------------------------------------------------
  46 +Variant D via self-executable and loader.path-configuration from different property file
  47 +--------------------------------------------------------------------------------------------
  48 +...
  49 +2019-04-25 22:52:19.494 INFO 26979 --- [ main] com.example.x.Application : Started Application in 6.005 seconds (JVM running for 6.453)
  50 +Try to use external driver
  51 +-------------> Found driver h2 1.4
  52 +
  53 +------------------------------------------------------------
  54 +Variant E via self-executable and LOADER_PATH environment
  55 +------------------------------------------------------------
  56 +...
  57 +2019-04-25 22:52:26.024 INFO 26995 --- [ main] com.example.x.Application : Started Application in 5.967 seconds (JVM running for 6.439)
  58 +Try to use external driver
  59 +-------------> Found driver h2 1.4
  60 +```
... ...
run.sh 0 → 100644
  1 +++ a/run.sh
... ... @@ -0,0 +1,42 @@
  1 +mvn clean package -DskipTests
  2 +
  3 +# https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/executable-jar.html#executable-jar-launching
  4 +# The PropertiesLauncher looks in BOOT-INF/lib/ in your application archive by default, but you can add additional locations by setting an environment variable called LOADER_PATH or loader.path in loader.properties (which is a comma-separated list of directories, archives, or directories within archives).
  5 +
  6 +# https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html#executable-jar-property-launcher-features
  7 +
  8 +current=`pwd`
  9 +
  10 +echo --------------------------
  11 +echo Variant A via "java -jar"
  12 +echo --------------------------
  13 +java -Dloader.path=$current/externallibs/ -jar ./target/x-0.0.1-SNAPSHOT.jar
  14 +
  15 +echo --------------------------
  16 +echo Variant B via "java -jar"
  17 +echo --------------------------
  18 +java -Dloader.path=$current/externallibs/h2-1.4.197.jar -jar ./target/x-0.0.1-SNAPSHOT.jar
  19 +
  20 +echo ------------------------------------------------------------------------------------------------
  21 +echo Variant C via "self-executable and loader.path-configuration from (default-) loader.properties"
  22 +echo ------------------------------------------------------------------------------------------------
  23 +echo loader.path=$current/externallibs/h2-1.4.197.jar > ./target/loader.properties
  24 +./target/x-0.0.1-SNAPSHOT.jar
  25 +rm ./target/loader.properties
  26 +
  27 +echo --------------------------------------------------------------------------------------------
  28 +echo Variant D via "self-executable and loader.path-configuration from different property file "
  29 +echo --------------------------------------------------------------------------------------------
  30 +export LOADER_CONFIG_LOCATION=otherloader.properties
  31 +echo loader.path=$current/externallibs/h2-1.4.197.jar > ./target/otherloader.properties
  32 +./target/x-0.0.1-SNAPSHOT.jar
  33 +unset LOADER_CONFIG_LOCATION
  34 +rm ./target/otherloader.properties
  35 +
  36 +echo ------------------------------------------------------------
  37 +echo Variant E via "self-executable and LOADER_PATH environment"
  38 +echo ------------------------------------------------------------
  39 +export LOADER_PATH=$current/externallibs/h2-1.4.197.jar
  40 +./target/x-0.0.1-SNAPSHOT.jar
  41 +
  42 +
... ...
springboot加载外部jar.md 0 → 100644
  1 +++ a/springboot加载外部jar.md
... ... @@ -0,0 +1,29 @@
  1 +# 加载外部jar
  2 +
  3 +
  4 +> 作者: 杜云山
  5 +
  6 +启动方式1 启动参数 -Dloader.path=
  7 +
  8 +```tex
  9 +启动: java -Dloader.path=d:\GitHub\spring-boot-propertieslauncher-with-external-jar-master\externallibs\ -jar x-0.0.1-SNAPSHOT.jar
  10 +
  11 +注意: -Dloader.path=的值如果有不对, 启动时直接值忽略了, 没有任何提示.
  12 +```
  13 +
  14 +
  15 +
  16 +启动方式2 jar包同级 文件:
  17 +
  18 +```
  19 +loader.properties
  20 +
  21 +内容: loader.path=/GitHub/spring-boot-propertieslauncher-with-external-jar-master/externallibs/
  22 +
  23 +
  24 +也可以手动指定多个jar: 中间用,分隔
  25 +loader.path=/GitHub/spring-boot-propertieslauncher-with-external-jar-master/externallibs/lamta-share-device-client-0.0.1-SNAPSHOT.jar,/GitHub/spring-boot-propertieslauncher-with-external-jar-master/externallibs/devices-aeroflex-0.0.1-SNAPSHOT.jar,/GitHub/spring-boot-propertieslauncher-with-external-jar-master/externallibs/lamta-share-device-core-0.0.1-SNAPSHOT.jar,/GitHub/spring-boot-propertieslauncher-with-external-jar-master/externallibs/mina-core-2.1.4.jar
  26 +
  27 +启动: java -jar x-0.0.1-SNAPSHOT.jar
  28 +
  29 +```
... ...
src/main/java/com/example/x/Application.java 0 → 100644
  1 +++ a/src/main/java/com/example/x/Application.java
... ... @@ -0,0 +1,35 @@
  1 +package com.example.x;
  2 +
  3 +import org.springframework.boot.CommandLineRunner;
  4 +import org.springframework.boot.SpringApplication;
  5 +import org.springframework.boot.autoconfigure.SpringBootApplication;
  6 +import org.springframework.context.ApplicationContext;
  7 +import org.springframework.context.annotation.Bean;
  8 +
  9 +import java.lang.reflect.Constructor;
  10 +
  11 +@SpringBootApplication
  12 +public class Application
  13 +{
  14 +
  15 + public static void main(String[] args)
  16 + {
  17 + SpringApplication.run(Application.class, args);
  18 + }
  19 +
  20 + @Bean
  21 + public CommandLineRunner commandLineRunner(ApplicationContext ctx)
  22 + {
  23 + return args ->
  24 + {
  25 + System.out.println("Try to use external driver");
  26 +
  27 + Class<?> aClass = Class.forName("org.h2.Driver");
  28 +
  29 + Constructor c = aClass.getConstructor();
  30 + java.sql.Driver driver = (java.sql.Driver) c.newInstance();
  31 +
  32 + System.out.println("-------------> Found driver h2 " + driver.getMajorVersion() + "." +driver.getMinorVersion());
  33 + };
  34 + }
  35 +}
... ...
src/main/resources/application.properties 0 → 100644
  1 +++ a/src/main/resources/application.properties
... ...