diff --git a/.github/workflows/test-pr.yml b/.github/workflows/test-pr.yml
index d1f1f590..245e5275 100644
--- a/.github/workflows/test-pr.yml
+++ b/.github/workflows/test-pr.yml
@@ -29,5 +29,11 @@ jobs:
with:
extra_args: --all-files --verbose
- name: Test with Maven
- if: (matrix.java-version == 8)
+ if: (matrix.java-version == 11)
run: mvn --batch-mode verify -DjacocoAgg
+ - name: Test build package on Windows
+ if: (matrix.os == 'windows-latest')
+ run: mvn --batch-mode package -DjacocoAgg && ./odf-validator.bat --version
+ - name: Test build package on Ubuntu
+ if: (matrix.os == 'ubuntu-latest')
+ run: mvn --batch-mode package -DjacocoAgg && ./odf-validator --version
diff --git a/odf-core/pom.xml b/odf-core/pom.xml
index 7990097e..ff7e98ab 100644
--- a/odf-core/pom.xml
+++ b/odf-core/pom.xml
@@ -50,7 +50,13 @@
net.sf.saxon
Saxon-HE
- 12.3
+ 11.5
+
+
+
+ org.slf4j
+ slf4j-nop
+ 2.0.7
diff --git a/odf-validator b/odf-validator
index 16061e74..bc204b0b 100755
--- a/odf-validator
+++ b/odf-validator
@@ -78,5 +78,5 @@ fi
exec "$JAVACMD" -Dfile.encoding=UTF8 -XX:+IgnoreUnrecognizedVMOptions \
-Dapp.name="ODF Validator" \
- -jar target/odf-validator-0.1.0-SNAPSHOT-jar-with-dependencies.jar \
+ -jar target/odf-validator-0.9.1-jar-with-dependencies.jar \
"$@"
diff --git a/odf-validator.bat b/odf-validator.bat
index 6861c682..2be1e18b 100644
--- a/odf-validator.bat
+++ b/odf-validator.bat
@@ -85,7 +85,7 @@ if NOT "%CLASSPATH_PREFIX%" == "" set CLASSPATH=%CLASSPATH_PREFIX%;%CLASSPATH%
@REM Reaching here means variables are defined and arguments have been captured
:endInit
-"%JAVACMD%" -Dfile.encoding=UTF8 -XX:+IgnoreUnrecognizedVMOptions -Dapp.name="ODF Validator" -jar target/odf-validator-0.1.0-SNAPSHOT-jar-with-dependencies.jar %CMD_LINE_ARGS%
+"%JAVACMD%" -Dfile.encoding=UTF8 -XX:+IgnoreUnrecognizedVMOptions -Dapp.name="ODF Validator" -jar target/odf-validator-0.9.1-jar-with-dependencies.jar %CMD_LINE_ARGS%
if %ERRORLEVEL% NEQ 0 goto error
goto end
diff --git a/pom.xml b/pom.xml
index 98796659..dd41709e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -227,6 +227,31 @@
deploy
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+
+
+
+ verapdf-scripts
+ validate
+
+ copy-resources
+
+
+
+ ./
+
+
+
+ src/main/resources/org/openpreservation/odf/batch
+ true
+
+
+
+
+
+
diff --git a/src/main/resources/org/openpreservation/odf/batch/odf-validator b/src/main/resources/org/openpreservation/odf/batch/odf-validator
new file mode 100755
index 00000000..aceb3641
--- /dev/null
+++ b/src/main/resources/org/openpreservation/odf/batch/odf-validator
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [ -h "$PRG" ]; do
+ ls=$(ls -ld "$PRG")
+ link=$(expr "$ls" : '.*-> \(.*\)$')
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=$(dirname "$PRG")/"$link"
+ fi
+done
+
+PRGDIR=$(dirname "$PRG")
+BASEDIR=$(cd "$PRGDIR/" >/dev/null || exit; pwd)
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+ Darwin*) darwin=true
+ if [ -z "$JAVA_VERSION" ] ; then
+ JAVA_VERSION="CurrentJDK"
+ else
+ echo "Using Java version: $JAVA_VERSION"
+ fi
+ if [ -z "$JAVA_HOME" ]; then
+ if [ -x "/usr/libexec/java_home" ]; then
+ JAVA_HOME=$(/usr/libexec/java_home)
+ else
+ JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/${JAVA_VERSION}/Home
+ fi
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=$(java-config --jre-home)
+ fi
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
+ [ -n "$CLASSPATH" ] && CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
+fi
+
+# If a specific java binary isn't specified search for the standard 'java' binary
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD=$(which java)
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." 1>&2
+ echo " We cannot execute $JAVACMD" 1>&2
+ exit 1
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
+ [ -n "$HOME" ] && HOME=$(cygpath --path --windows "$HOME")
+ [ -n "$BASEDIR" ] && BASEDIR=$(cygpath --path --windows "$BASEDIR")
+fi
+
+exec "$JAVACMD" -Dfile.encoding=UTF8 -XX:+IgnoreUnrecognizedVMOptions \
+ -Dapp.name="ODF Validator" \
+ -jar odf-apps/target/odf-apps-${project.version}-jar-with-dependencies.jar \
+ "$@"
diff --git a/src/main/resources/org/openpreservation/odf/batch/odf-validator.bat b/src/main/resources/org/openpreservation/odf/batch/odf-validator.bat
new file mode 100644
index 00000000..b2175c2b
--- /dev/null
+++ b/src/main/resources/org/openpreservation/odf/batch/odf-validator.bat
@@ -0,0 +1,116 @@
+@REM
+@REM This file is part of veraPDF Installer, a module of the veraPDF project.
+@REM Copyright (c) 2015, veraPDF Consortium
+@REM All rights reserved.
+@REM
+@REM veraPDF Installer is free software: you can redistribute it and/or modify
+@REM it under the terms of either:
+@REM
+@REM The GNU General public license GPLv3+.
+@REM You should have received a copy of the GNU General Public License
+@REM along with veraPDF Installer as the LICENSE.GPL file in the root of the source
+@REM tree. If not, see http://www.gnu.org/licenses/ or
+@REM https://www.gnu.org/licenses/gpl-3.0.en.html.
+@REM
+@REM The Mozilla Public License MPLv2+.
+@REM You should have received a copy of the Mozilla Public License along with
+@REM veraPDF Installer as the LICENSE.MPL file in the root of the source tree.
+@REM If a copy of the MPL was not distributed with this file, you can obtain one at
+@REM http://mozilla.org/MPL/2.0/.
+@REM
+
+@echo off
+
+set ERROR_CODE=0
+
+:init
+@REM Decide how to startup depending on the version of windows
+
+@REM -- Win98ME
+if NOT "%OS%"=="Windows_NT" goto Win9xArg
+
+@REM set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" @setlocal
+
+@REM -- 4NT shell
+if "%eval[2+2]" == "4" goto 4NTArgs
+
+@REM -- Regular WinNT shell
+set CMD_LINE_ARGS=%*
+goto WinNTGetScriptDir
+
+@REM The 4NT Shell from jp software
+:4NTArgs
+set CMD_LINE_ARGS=%$
+goto WinNTGetScriptDir
+
+:Win9xArg
+@REM Slurp the command line arguments. This loop allows for an unlimited number
+@REM of arguments (up to the command line limit, anyway).
+set CMD_LINE_ARGS=
+:Win9xApp
+if %1a==a goto Win9xGetScriptDir
+set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
+shift
+goto Win9xApp
+
+:Win9xGetScriptDir
+set SAVEDIR=%CD%
+%0\
+cd %0\..\..
+set BASEDIR=%CD%
+cd %SAVEDIR%
+set SAVE_DIR=
+goto repoSetup
+
+:WinNTGetScriptDir
+set BASEDIR=%~dp0
+if %BASEDIR:~-1%==\ set BASEDIR=%BASEDIR:~0,-1%
+
+:repoSetup
+set REPO=
+
+
+if "%JAVACMD%"=="" set JAVACMD=java
+
+if "%REPO%"=="" set REPO=%BASEDIR%\bin
+
+set CLASSPATH="%BASEDIR%"\etc;"%REPO%"\*
+
+set ENDORSED_DIR=
+if NOT "%ENDORSED_DIR%" == "" set CLASSPATH="%BASEDIR%"\%ENDORSED_DIR%\*;%CLASSPATH%
+
+if NOT "%CLASSPATH_PREFIX%" == "" set CLASSPATH=%CLASSPATH_PREFIX%;%CLASSPATH%
+
+@REM Reaching here means variables are defined and arguments have been captured
+:endInit
+
+"%JAVACMD%" -Dfile.encoding=UTF8 -XX:+IgnoreUnrecognizedVMOptions -Dapp.name="ODF Validator" -jar .\odf-apps\target\odf-apps-${project.version}-jar-with-dependencies.jar %CMD_LINE_ARGS%
+if %ERRORLEVEL% NEQ 0 goto error
+goto end
+
+:error
+if "%OS%"=="Windows_NT" @endlocal
+set ERROR_CODE=%ERRORLEVEL%
+
+:end
+@REM set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" goto endNT
+
+@REM For old DOS remove the set variables from ENV - we assume they were not set
+@REM before we started - at least we don't leave any baggage around
+set CMD_LINE_ARGS=
+goto postExec
+
+:endNT
+@REM If error code is set to 1 then the endlocal was done already in :error.
+if %ERROR_CODE% EQU 0 @endlocal
+
+
+:postExec
+
+if "%FORCE_EXIT_ON_ERROR%" == "on" (
+ if %ERROR_CODE% NEQ 0 exit %ERROR_CODE%
+)
+
+exit /B %ERROR_CODE%