Hello
In geoserver 2.20.x the startup.sh of the platform independent binary distribution has been refactored
2.19.x:
exec "$_RUNJAVA" $JAVA_OPTS $MARLIN_ENABLER -DGEOSERVER_DATA_DIR="$GEOSERVER_DATA_DIR" -Djava.awt.headless=true -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -jar start.jar
2.20.x:
IFS=$(printf '\n\t')
...
exec "${_RUNJAVA}" "${JAVA_OPTS:--DNoJavaOpts}" "${MARLIN_ENABLER:--DMarlinDisabled}" "${RENDERER:--DDefaultrenderer}" "-Djetty.base=${GEOSERVER_HOME}" "-DGEOSERVER_DATA_DIR=${GEOSERVER_DATA_DIR}" -Djava.awt.headless=true -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -jar "${GEOSERVER_HOME}/start.jar"
This doesn't allow setting multiple parameters in JAVA_OPTS anymore because it will be passed to exec as one argument.
Reproduce like this:
1. Download and extract the zip file
2. cd geoserver-2.20.2-bin
3. export JAVA_OPTS="-Xms512m -Xmx1g"
4. bin/startup.sh
Result:
GEOSERVER_HOME environment variable not found, using current
directory. If not set then running this script from other
directories will not work in the future.
GEOSERVER DATA DIR is /vagrant/geoserver-2.20.2-bin/data_dir
Invalid initial heap size: -Xms512m -Xmx1g
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
By setting set -x before the call one can see that the parameters are passed as one argument:
+ exec java '-Xms512m -Xmx1g' -Xbootclasspath/a:/vagrant/geoserver-2.20.2-bin/webapps/geoserver/WEB-INF/lib/marlin-0.9.3.jar -Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine -Djetty.base=/vagrant/geoserver-2.20.2-bin -DGEOSERVER_DATA_DIR=/vagrant/geoserver-2.20.2-bin/data_dir -Djava.awt.headless=true -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -jar /vagrant/geoserver-2.20.2-bin/start.jar
By removing 'IFS=$(printf '\n\t')' and removing the quotation marks from "${JAVA_OPTS:--DNoJavaOpts}" this will work again:
+ exec java -Xms512m -Xmx1g -Xbootclasspath/a:/vagrant/geoserver-2.20.2-bin/webapps/geoserver/WEB-INF/lib/marlin-0.9.3.jar -Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine -Djetty.base=/vagrant/geoserver-2.20.2-bin -DGEOSERVER_DATA_DIR=/vagrant/geoserver-2.20.2-bin/data_dir -Djava.awt.headless=true -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -jar /vagrant/geoserver-2.20.2-bin/start.jar
I guess the same applies to other variables if the contain multiple arguments.
Would be great if setting multiple parameters in JAVA_OPTS will be supported again.
Regards,
Björn