Ignore:
Timestamp:
2021-10-21T18:58:59+13:00 (3 years ago)
Author:
davidb
Message:

Adjusted solution to how -noclasspath is explicitly set by Greenstone3 so we don't get the ant vs ant.jar cross-contamination problem. Previously it had been dealt with inside the GLI GS3ServerThread.java code (explicitly adding it in). In this update, the ANT_ARGS environment variable is set in gs3-setup.bash, thereby triggering the same outcome, but only needs to be done in one place.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/gs3-setup.sh

    r35418 r35661  
    573573# Ant
    574574echo "Checking for Ant"
    575 #Note: No longer need to print out info about minimum version of Ant needed
    576 #  for Greenstone3 (v1.7.1 at the time of writing this comment!), as this is
    577 #  now explicitly tested for in the build.xml file, and an error message generated
    578 #  if not new enough
     575
     576# Note 1: No longer need to print out info about minimum version of
     577#  Ant needed for Greenstone3 (v1.8.2 at the time of updating this
     578#  comment!), as this is now explicitly tested for in the build.xml
     579#  file, and an error message generated if not new enough
     580
     581# Note 2: The setting of ANT_ARGS to '-noclasspath' flag below is to
     582#   void "cross-contamination' between this setup file -- which sets
     583#   CLASSPATH to include all the jars in <gsdl3srchome>web/WEB-INF,
     584#   including an ant.jar -- and what is needed to cleanly run the
     585#   'ant' script and have it find the matching 'ant.jar' that goes
     586#   with it (i.e. is the same version).  For example we want the
     587#   system installed /usr/bin/ant to find /usr/share/ant/lib/ant.jar
     588#
     589#   Undesirable behaviour can occur, however, when the 'ant' that is
     590#   run is the one found on PATH, and a different ant.jar is found (as
     591#   can occur when CLASSPATH is set).  For this pattern of running the
     592#   'ant' script the 'ant.jar' that is in Greenstone's web/WEB-INF
     593#   area is found.  This Greenstone ant.jar file (at the time of
     594#   writing) is for ant v.1.8.2, and causes some of the Java
     595#   properities ant uses to changed.  Even if your installed 'ant' is
     596#   (say v1.10.9) and the JDK you are running is JDK11, as a
     597#   consequence of finding the older ant.jar file, ant.version is set
     598#   to 1.8.2 and ant.java.version to 1.7.  As a consequence of this,
     599#   the Greenstone3 build.xml fails to run as its minimum Java version
     600#   needs to be >=1.8
     601#
     602#   In looking at how to address this issue, updating the version of ant.jar
     603#   was considered.  However, taking this approach means there will aways be
     604#   a risk of a version mismatch between a system installed 'ant' and
     605#   the version of ant.jar Greenstone includes.
     606#
     607#   The approach taken here, then, is to more carefully control the
     608#   launching of ant.  By setting ANT_ARGS to -noclasspath, the 'ant'
     609#   script is directed not to use CLASSPATH, thereby avoidig the
     610#   cross-contamination problem.
     611#
     612#   Of further note, in the event ANT_HONE is set, then the situation
     613#   we are in is much simpler, as the cross-contamination problem
     614#   doesn't arise.  This is because the 'ant' script explicitly sets
     615#   ANT_LIB, based on ANT_HOME, to explicitly pick out ant.jar file
     616#   that goes along with the script.
     617#
    579618
    580619if [ -x "$GSDL3SRCHOME/packages/ant/bin/ant" ] ; then
     
    587626    addtopath PATH "$ANT_HOME/bin"
    588627    echo "  - `ant -version`"
    589   else
    590     which ant &> /dev/null
     628  else
     629    # which ant &> /dev/null
     630    # Posix friendly way to determine if a program exists:
     631    #   https://stackoverflow.com/questions/592620/how-can-i-check-if-a-program-exists-from-a-bash-script
     632    command -v ant &> /dev/null
     633     
    591634    if [ "$?" = "0" ] ; then
    592635      echo "  - System install ant detected"
     636
     637      if [ "x$ANT_ARGS" = "x" ] ; then
     638      ANT_ARGS="-noclasspath"
     639      else
     640      ANT_ARGS="-noclasspath $ANT_ARGS"
     641      fi
     642      export ANT_ARGS
     643
    593644      echo "  - `ant -version`"
     645
    594646    else
    595647      echo "  - WARNING: Failed to find 'ant'"
Note: See TracChangeset for help on using the changeset viewer.