feature/manual_and_auto_classpath_option (#1)
Reviewed-on: https://git.kirby-link.dd-dns.de/public/warp4j/pulls/1
This commit is contained in:
parent
aeffdc3eb5
commit
6ee83e1056
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
fatjar/
|
fatjar/
|
||||||
warped/
|
warped/
|
||||||
TODO.md
|
TODO.md
|
||||||
|
/.project
|
||||||
|
@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y \
|
|||||||
zip \
|
zip \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
RUN curl -fsSL -o /tmp/warp-packer \
|
RUN curl -fsSL -o /tmp/warp-packer \
|
||||||
https://github.com/dgiagio/warp/releases/download/v0.3.0/linux-x64.warp-packer \
|
https://git.kirby-link.dd-dns.de/attachments/f701fbff-c58b-4aac-91e3-47efda1fc760 \
|
||||||
&& install -D \
|
&& install -D \
|
||||||
--mode=755 \
|
--mode=755 \
|
||||||
--owner=root \
|
--owner=root \
|
||||||
|
@ -4,11 +4,11 @@ Here are several more ways to install `warp4j`.
|
|||||||
|
|
||||||
## Manual
|
## Manual
|
||||||
|
|
||||||
First install [warp-packer](https://github.com/dgiagio/warp/releases) and ensure other common tools available: `awk`, `curl`, `file`, `grep`, `sed`, `sort`, `tar`, `unzip`, optional: `zip`. Then install `warp4j` like this:
|
First install [warp-packer](https://git.kirby-link.dd-dns.de/public/warp/releases) and ensure other common tools available: `awk`, `curl`, `file`, `grep`, `sed`, `sort`, `tar`, `unzip`, optional: `zip`. Then install `warp4j` like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ LOCATION=/usr/local/bin \
|
$ LOCATION=/usr/local/bin \
|
||||||
LINK=https://raw.githubusercontent.com/guziks/warp4j/stable/warp4j \
|
LINK=https://git.kirby-link.dd-dns.de/public/warp4j/raw/branch/master/warp4j \
|
||||||
TEMP_LOCATION=/tmp/warp4j \
|
TEMP_LOCATION=/tmp/warp4j \
|
||||||
bash -c 'curl -fsSL -o $TEMP_LOCATION $LINK && \
|
bash -c 'curl -fsSL -o $TEMP_LOCATION $LINK && \
|
||||||
sudo install -D \
|
sudo install -D \
|
||||||
|
14
README.md
14
README.md
@ -6,7 +6,7 @@ Turn JAR (java archive) into self-contained executable in a single command.
|
|||||||
|
|
||||||
- downloads java runtimes automatically
|
- downloads java runtimes automatically
|
||||||
- makes runtimes optimized for your application
|
- makes runtimes optimized for your application
|
||||||
- creates self-contained binaries for Linux, macOS and Windows using [warp-packer](https://github.com/dgiagio/warp)
|
- creates self-contained binaries for Linux, macOS and Windows using [warp-packer](https://git.kirby-link.dd-dns.de/public/warp)
|
||||||
- works on Linux, macOS and Windows (with Windows Subsystem for Linux)
|
- works on Linux, macOS and Windows (with Windows Subsystem for Linux)
|
||||||
- supports cross "compilation"
|
- supports cross "compilation"
|
||||||
- does not require neither JDK nor JRE installed
|
- does not require neither JDK nor JRE installed
|
||||||
@ -20,7 +20,7 @@ Just put both `warp4j` and `warp-packer` somewhere in your PATH and run `warp4j
|
|||||||
Curl one-liner installs latest versions of both `warp4j` and `warp-packer`:
|
Curl one-liner installs latest versions of both `warp4j` and `warp-packer`:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ bash -c "$(curl -fsSL https://raw.githubusercontent.com/guziks/warp4j/stable/install)"
|
$ bash -c "$(curl -fsSL https://git.kirby-link.dd-dns.de/public/warp4j/raw/branch/master/install)"
|
||||||
```
|
```
|
||||||
|
|
||||||
This script will show missing dependencies (if there are any), they must be installed with your package manager.
|
This script will show missing dependencies (if there are any), they must be installed with your package manager.
|
||||||
@ -63,8 +63,12 @@ Turn JAR (java archive) into self-contained executable
|
|||||||
Options:
|
Options:
|
||||||
-j, --java-version <version>
|
-j, --java-version <version>
|
||||||
override JDK/JRE version
|
override JDK/JRE version
|
||||||
examples: "11", "11.0", "11.0.2", "11.0.2+9"
|
examples: "17", "17.0", "17.0.2", "17.0.2+9"
|
||||||
(default: 11)
|
(default: 17)
|
||||||
|
-cp, --class-path <classpath>
|
||||||
|
adds additional classpaths to the jdeps call
|
||||||
|
--auto-class-path extract and get class-path values from jar file
|
||||||
|
ignored when -cp, --class-path is set
|
||||||
-o, --output <directory>
|
-o, --output <directory>
|
||||||
override output directory;
|
override output directory;
|
||||||
this is relative to current PWD
|
this is relative to current PWD
|
||||||
@ -93,6 +97,7 @@ Options:
|
|||||||
"java <options> -jar <jar file>";
|
"java <options> -jar <jar file>";
|
||||||
use quotes when passing multiple options
|
use quotes when passing multiple options
|
||||||
example: '-Xms512m -Xmx1024m'
|
example: '-Xms512m -Xmx1024m'
|
||||||
|
-s, --silent using javaw instead of java for windows
|
||||||
-h, --help show this message
|
-h, --help show this message
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -100,6 +105,7 @@ Options:
|
|||||||
|
|
||||||
Tested on the following operating systems:
|
Tested on the following operating systems:
|
||||||
|
|
||||||
|
- Debian 10.8
|
||||||
- Ubuntu 18.04
|
- Ubuntu 18.04
|
||||||
- macOS Mojave
|
- macOS Mojave
|
||||||
- Windows Subsystem for Linux with Ubuntu 14.04
|
- Windows Subsystem for Linux with Ubuntu 14.04
|
||||||
|
26
install
26
install
@ -12,7 +12,9 @@ function fail() {
|
|||||||
|
|
||||||
# platform IDs
|
# platform IDs
|
||||||
LIN=linux
|
LIN=linux
|
||||||
|
LIN_URL=https://git.kirby-link.dd-dns.de/attachments/f701fbff-c58b-4aac-91e3-47efda1fc760
|
||||||
MAC=macos
|
MAC=macos
|
||||||
|
MAC_URL=https://git.kirby-link.dd-dns.de/attachments/b09c6469-406a-4dd1-b5e8-1294a3aabf0f
|
||||||
WIN=windows
|
WIN=windows
|
||||||
|
|
||||||
# returns this platform ID
|
# returns this platform ID
|
||||||
@ -32,20 +34,14 @@ function get_this_platform() {
|
|||||||
THIS_PLATFORM=$(get_this_platform)
|
THIS_PLATFORM=$(get_this_platform)
|
||||||
|
|
||||||
# fetches latest release download link for the platform
|
# fetches latest release download link for the platform
|
||||||
function get_latest_warp_link() {
|
function get_warp_link() {
|
||||||
local this_platform=$1
|
local this_platform=$1
|
||||||
local info
|
|
||||||
info=$(curl -fsSL https://api.github.com/repos/dgiagio/warp/releases)
|
if [ "$this_platform" = "$LIN" ]; then
|
||||||
if [[ $? != 0 ]]; then
|
echo "$LIN_URL"
|
||||||
echo "Error: Failed to get information about releases" >&2
|
else
|
||||||
fail
|
echo "$MAC_URL"
|
||||||
fi
|
fi
|
||||||
echo "$info" \
|
|
||||||
| grep "browser_download_url" \
|
|
||||||
| grep "$this_platform-x64.warp-packer" \
|
|
||||||
| head -n 1 \
|
|
||||||
| awk '{print $2}' \
|
|
||||||
| sed -e 's/"//g'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# downloads and installs single binary
|
# downloads and installs single binary
|
||||||
@ -91,10 +87,10 @@ function get_missing_deps() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
WARP4J_LINK="https://raw.githubusercontent.com/guziks/warp4j/stable/warp4j"
|
WARP4J_LINK="https://git.kirby-link.dd-dns.de/public/warp4j/raw/branch/master/warp4j"
|
||||||
|
|
||||||
echo "Getting information about warp-packer releases..."
|
echo "Getting information about warp-packer releases..."
|
||||||
WARP_LINK=$(get_latest_warp_link $THIS_PLATFORM)
|
WARP_LINK=$(get_warp_link $THIS_PLATFORM)
|
||||||
|
|
||||||
MISSING_DEPS=$(get_missing_deps)
|
MISSING_DEPS=$(get_missing_deps)
|
||||||
|
|
||||||
|
60
warp4j
60
warp4j
@ -9,8 +9,12 @@ function print_help {
|
|||||||
echo 'Options:'
|
echo 'Options:'
|
||||||
echo ' -j, --java-version <version>'
|
echo ' -j, --java-version <version>'
|
||||||
echo ' override JDK/JRE version'
|
echo ' override JDK/JRE version'
|
||||||
echo ' examples: "11", "11.0", "11.0.2", "11.0.2+9"'
|
echo ' examples: "17", "17.0", "17.0.2", "17.0.2+9"'
|
||||||
echo ' (default: 11)'
|
echo ' (default: 17)'
|
||||||
|
echo ' -cp, --class-path <classpath>'
|
||||||
|
echo ' adds additional classpaths to the jdeps call'
|
||||||
|
echo ' --auto-class-path extract and get class-path values from jar file'
|
||||||
|
echo ' ignored when -cp, --class-path is set'
|
||||||
echo ' -o, --output <directory>'
|
echo ' -o, --output <directory>'
|
||||||
echo ' override output directory;'
|
echo ' override output directory;'
|
||||||
echo ' this is relative to current PWD'
|
echo ' this is relative to current PWD'
|
||||||
@ -27,6 +31,7 @@ function print_help {
|
|||||||
echo ' --pull check if more recent JDK/JRE distro is available;'
|
echo ' --pull check if more recent JDK/JRE distro is available;'
|
||||||
echo ' by default latest cached version that matches'
|
echo ' by default latest cached version that matches'
|
||||||
echo ' "--java-version" is used'
|
echo ' "--java-version" is used'
|
||||||
|
echo ' to get the classpath for jdeps call'
|
||||||
echo ' --linux create binary for Linux'
|
echo ' --linux create binary for Linux'
|
||||||
echo ' --macos create binary for macOS'
|
echo ' --macos create binary for macOS'
|
||||||
echo ' --windows create binary for Windows'
|
echo ' --windows create binary for Windows'
|
||||||
@ -39,6 +44,7 @@ function print_help {
|
|||||||
echo ' "java <options> -jar <jar file>";'
|
echo ' "java <options> -jar <jar file>";'
|
||||||
echo ' use quotes when passing multiple options'
|
echo ' use quotes when passing multiple options'
|
||||||
echo " example: '-Xms512m -Xmx1024m'"
|
echo " example: '-Xms512m -Xmx1024m'"
|
||||||
|
echo ' -s, --silent using javaw instead of java for windows'
|
||||||
echo ' -h, --help show this message'
|
echo ' -h, --help show this message'
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
@ -104,6 +110,10 @@ while [[ $# -gt 0 ]]; do
|
|||||||
print_help
|
print_help
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
|
-cp|--class-path)
|
||||||
|
CLASS_PATH="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
-j|--java-version)
|
-j|--java-version)
|
||||||
JAVA_VERSION="$2"
|
JAVA_VERSION="$2"
|
||||||
JAVA_VERSION_OVERRIDEN=true
|
JAVA_VERSION_OVERRIDEN=true
|
||||||
@ -145,6 +155,14 @@ while [[ $# -gt 0 ]]; do
|
|||||||
JVM_OPTIONS="$2"
|
JVM_OPTIONS="$2"
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
--auto-class-path)
|
||||||
|
AUTO_CLASS_PATH=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-s|--silent)
|
||||||
|
SILENT=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
-*|--*) # unsupported options
|
-*|--*) # unsupported options
|
||||||
fail_with "Unsupported option $1"
|
fail_with "Unsupported option $1"
|
||||||
;;
|
;;
|
||||||
@ -223,7 +241,7 @@ if [[ $JVM_IMPL ]] &&
|
|||||||
fail_with "jvm implementation \"$JVM_IMPL\" is not correct"
|
fail_with "jvm implementation \"$JVM_IMPL\" is not correct"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
LATEST_LTS=11 # latest LTS java branch
|
LATEST_LTS=17 # latest LTS java branch
|
||||||
|
|
||||||
# default options
|
# default options
|
||||||
test -z $JAVA_VERSION && JAVA_VERSION=$LATEST_LTS
|
test -z $JAVA_VERSION && JAVA_VERSION=$LATEST_LTS
|
||||||
@ -369,6 +387,11 @@ fi
|
|||||||
JAVA_DOWNLOAD_PATH=$CACHE_PATH/$JAVA_DISTRO_TYPE/$JVM_IMPL
|
JAVA_DOWNLOAD_PATH=$CACHE_PATH/$JAVA_DISTRO_TYPE/$JVM_IMPL
|
||||||
BUNDLES_PATH=$CACHE_PATH/bundle # prepare bundles here
|
BUNDLES_PATH=$CACHE_PATH/bundle # prepare bundles here
|
||||||
|
|
||||||
|
# path for extracted jar files
|
||||||
|
EXTRACTED_JAR_PATH=$CACHE_PATH/app-jar # prepare bundles here
|
||||||
|
mkdir -p ${EXTRACTED_JAR_PATH}
|
||||||
|
trap 'rm -rf ${EXTRACTED_JAR_PATH}' EXIT
|
||||||
|
|
||||||
DIR="$(pwd -P)" # execution directory path
|
DIR="$(pwd -P)" # execution directory path
|
||||||
|
|
||||||
# final binaries created in WARPED_TEMP_PATH and then moved to WARPED_PATH
|
# final binaries created in WARPED_TEMP_PATH and then moved to WARPED_PATH
|
||||||
@ -390,7 +413,7 @@ JAVA_DIST='"$BUNDLED_DISTRO_SUBDIR"'
|
|||||||
JAR='"$JAR_NAME"'.jar
|
JAR='"$JAR_NAME"'.jar
|
||||||
|
|
||||||
DIR="$(cd "$(dirname "$0")" ; pwd -P)"
|
DIR="$(cd "$(dirname "$0")" ; pwd -P)"
|
||||||
JAVA=$DIR/$JAVA_DIST/bin/java
|
JAVA=$DIR/$JAVA_DIST/bin/'"$JAVA_EXEC"'
|
||||||
JAR_PATH=$DIR/$JAR
|
JAR_PATH=$DIR/$JAR
|
||||||
|
|
||||||
exec "$JAVA" '"$JVM_OPTIONS"' -jar "$JAR_PATH" "$@"
|
exec "$JAVA" '"$JVM_OPTIONS"' -jar "$JAR_PATH" "$@"
|
||||||
@ -407,10 +430,10 @@ SETLOCAL
|
|||||||
SET "JAVA_DIST='"$BUNDLED_DISTRO_SUBDIR"'"
|
SET "JAVA_DIST='"$BUNDLED_DISTRO_SUBDIR"'"
|
||||||
SET "JAR='"$JAR_NAME"'.jar"
|
SET "JAR='"$JAR_NAME"'.jar"
|
||||||
|
|
||||||
SET "JAVA=%~dp0\%JAVA_DIST%\bin\java.exe"
|
SET "JAVA=%~dp0\%JAVA_DIST%\bin\'"$JAVA_EXEC"'
|
||||||
SET "JAR_PATH=%~dp0\%JAR%"
|
SET "JAR_PATH=%~dp0\%JAR%"
|
||||||
|
|
||||||
CALL %JAVA% '"$JVM_OPTIONS"' -jar %JAR_PATH% %*
|
START %JAVA% '"$JVM_OPTIONS"' -jar %JAR_PATH% %*
|
||||||
EXIT /B %ERRORLEVEL%
|
EXIT /B %ERRORLEVEL%
|
||||||
'
|
'
|
||||||
}
|
}
|
||||||
@ -620,7 +643,21 @@ JDEPS=$JDK_PATH/bin/jdeps
|
|||||||
if [[ $JAVA_DISTRO_TYPE == $DISTRO_TYPE_JDK ]]; then
|
if [[ $JAVA_DISTRO_TYPE == $DISTRO_TYPE_JDK ]]; then
|
||||||
echo "Analyzing dependencies..."
|
echo "Analyzing dependencies..."
|
||||||
# TODO check for errors
|
# TODO check for errors
|
||||||
MODULES=$("$JDEPS" --print-module-deps "$JAR" | grep -v Warning)
|
# TODO If JAVA_VERSION is not an INT it will throw an error
|
||||||
|
if [ -n "$CLASS_PATH" ]
|
||||||
|
then
|
||||||
|
echo "Using given classpaths: $CLASS_PATH"
|
||||||
|
MODULES=$($JDEPS --class-path=$CLASS_PATH --print-module-deps --ignore-missing-deps --multi-release $JAVA_VERSION_BASE $JAR | grep -v Warning)
|
||||||
|
elif [ "$AUTO_CLASS_PATH" ]
|
||||||
|
then
|
||||||
|
echo "Extracting jar file to get classpath"
|
||||||
|
unzip -q "${JAR}" -d "${EXTRACTED_JAR_PATH}"
|
||||||
|
echo "Fetching modules"
|
||||||
|
MODULES=$($JDEPS --ignore-missing-deps --print-module-deps --recursive --multi-release $JAVA_VERSION_BASE -quiet --class-path=${EXTRACTED_JAR_PATH}/BOOT-INF/lib/* --module-path=${EXTRACTED_JAR_PATH}/BOOT-INF/lib/BOOT-INF/lib/* $JAR | grep -v Warning)
|
||||||
|
else
|
||||||
|
echo "Fetch modules with default behavior"
|
||||||
|
MODULES=$("$JDEPS" --print-module-deps --ignore-missing-deps --multi-release $JAVA_VERSION_BASE "$JAR" | grep -v Warning)
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# creates minimized runtime for the platform
|
# creates minimized runtime for the platform
|
||||||
@ -641,6 +678,13 @@ function create_optimized_runtime() {
|
|||||||
# creates warp bundle for the platform
|
# creates warp bundle for the platform
|
||||||
function create_bundle() {
|
function create_bundle() {
|
||||||
local platform=$1
|
local platform=$1
|
||||||
|
|
||||||
|
if [[ $SILENT ]] && [[ $platform == $WIN ]]; then
|
||||||
|
JAVA_EXEC=javaw
|
||||||
|
else
|
||||||
|
JAVA_EXEC=java
|
||||||
|
fi
|
||||||
|
|
||||||
case $JAVA_DISTRO_TYPE in
|
case $JAVA_DISTRO_TYPE in
|
||||||
$DISTRO_TYPE_JDK)
|
$DISTRO_TYPE_JDK)
|
||||||
create_optimized_runtime $platform
|
create_optimized_runtime $platform
|
||||||
@ -734,4 +778,4 @@ function warp_targets() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# actually create binaries and archives for all targets
|
# actually create binaries and archives for all targets
|
||||||
warp_targets
|
warp_targets
|
Loading…
Reference in New Issue
Block a user