source: main/trunk/gli/lib/README.txt@ 34296

Last change on this file since 34296 was 34296, checked in by ak19, 4 years ago

Need to use Commons CSV jar library for Java 6, as we use Java 6 on one of the nightly VMs and gli needs to successfully compile against Commons CSV when using JDK 6. Kathy noticed her JDK 7 had issues with the earlier Commons CSV included in gli\lib\apache.jar. That one was built for Java 8. Now apache.jar includes the Commons CSV built for Java 6. Tested to compile and run Export to CSV successfully on my Windows which uses Java 8.

File size: 7.3 KB
Line 
1---------------------------
2A. THE apache.jar FILE
3---------------------------
4
5GLI's apache.jar is a custom jar file that collects together apache libraries necessary to compile, build and run GLI. There's no documentation on the various jar files that it contains, but I've guessed by inspecting the contents.
6
7Some of the contents are from xercesImpl.jar and xml-apis.jar, which may need to be kept up-to-date in tandem, since they are related and interdependent jar files as updates to xalan.jar for instance come with correspondingly updated xerces, xml-apis and other related jars.
8
9
10Commit r29729 adds the contents of xml-apis.jar (sax) and xercesImpl.jar (both found in GS3/web/WEB-INF/lib else packages/tomcat/lib) into apache.jar, replacing the older xerces and xml-apis contained in apache.jar.
11This update was necessary to handle commit r29687 where web.xml was split into web.xml and servlets.xml, with the former including the latter as an entity. GLI needs to use an EntityResolver to work with this, but the older xerces and xml-apis in apache.jar would still result in GLI failing to start, unable to parse web.xml because of the way in which servlets.xml was included. The xercesImpl and xml-apis jars in GS3/web/WEB-INF/lib (copied into packages/tomcat/lib) contain versions of these jars that do make the EntityResolver in GLI work.
12
13
14---------------------------
15CONTENTS OF apache.jar
16---------------------------
17
18Overview of the contents of apache.jar and whether they got updated in the upcoming commit 29729.
19
20- javax: came with the updated version of xml-apis.jar
21- license: came with the updated version of xml-apis.jar
22
23- com: not sure where the contents came from, but they're not apache. Left them as-is.
24
25- org:
26 - w3c: replaced with w3c folder from xml-apis.jar from GS3/web/WEB-INF/lib (packages/tomcat/lib)
27 also added /org/w3c/dom/html/HTMLDOMImplementation.class of xercesImpl.jar in here, to replace the older version
28 - xml: replaced with xml folder from xml-apis.jar from GS3/web/WEB-INF/lib (packages/tomcat/lib)
29 - saxpath: left as-is. See jaxen below.
30 - jaxen: left as-is. The latest version is 1.1.6 from jaxen.codehaus.org/releases.html, but it seems to be a separate project from apache's xerces and xml-apis and therefore not tightly connected with them. The latest version of jaxen includes saxpath, which means that jaxen and saxpath may be tightly connected to each other and require concurrent updating, even if they're not dependent on xerces and xml-apis and therefore not require concurrent updating with them.
31
32 - apache: most of the contents, being the html, wml, xerces and xml folders have been replaced by their counterparts from the current version of xercesImpl.jar used in GS3/web/WEB-INF/lib (packages/tomcat/lib)
33 - xmlcommons: replaced with org/apache/xmlcommons folder from xml-apis.jar from GS3/web/WEB-INF/lib (packages/tomcat/lib)
34 - log4j: left as-is.
35 - commons: left as-is.
36 - codec: appears to be from commons-codec,
37 - logging: appears to be from commons-logging.
38 - not sure where the 4 other subfolders of commons (beanutils, collections, digester, httpclient) are from. See commit message of http://trac.greenstone.org/log/gli/trunk/lib/apache.jar?rev=14319 for ideas.
39 - csv: ADDED 11/07/2020 from commons-csv-1.8.jar. But compiling gli against this was incompatible with JDK 7 and 6 that we use to generate VMs on the nightly machines. (However the version of JRE 7 that we include was compatible with this.) Fortunately, makes available archived versions of the Commons CSV jar file and https://commons.apache.org/proper/commons-csv/ marks which versions of Commons CSV is compatible with JDK 6 and other Java versions. Got commons-csv-1.4.jar, compatible with Java 6 on 26/07/2020.
40
41Essentially, in commit 29729, the entire contents of GS3 web-lib's xml-apis.jar and xercesImpl.jar have been added to apache.jar after unzipping it, replacing earlier versions already present. The "javax" and "licence" toplevel folders of apache.jar are proper additions, deriving from xml-apis.jar. All other contents of apache.jar have been left as they were.
42
43
44---------------------------
45UPDATING apache.jar
46---------------------------
47Create a folder in gli/lib called apache.
48Copy apache.jar from gli/lib into gli/lib/apache.
49Then go into the new apache folder and unjar (unzip) the apache.jar there:
50> cd apache
51> jar -xvf apache.jar
52
53
54After unzipping apache.jar, its contents were updated to use the later xerces and xml-apis as described in the sections above.
55
56How to recreate the apache.jar:
57> cd gli/lib/apache
58> jar -cvf apache.jar *
59> jar -tvf apache.jar
60 (to check the contents of the jar file just created)
61
62The apache.jar file gets generated inside gli/lib/apache, move it into gli/lib replacing any older versions. Then commit it.
63
64Further changes to makejar.sh/bat, to mention the new javax subfolder, since it may also need to be unzipped from apache.jar along with the other contained libraries, so that xml-apis' javax too can be included in GLI.jar when this is generated, in case there is any dependence on javax in the rest of xml-apis' classes.
65
66
67
68
69------------------------------------------------
70B. THE jna.jar and jna-platform.jar FILES
71------------------------------------------------
72
73JNA = Java Native Access. These jar files are used by SafeProcess.java (in GLI and GS3 src code) to obtain the process ID of external processes launched by Java, so that on Windows, we can use the process ID to get the process IDs of subprocesses that were launched by our external process, and terminate them successfully.
74
75Generally, on Windows, process.destroy() only destroys the external process launched by Java. Not subprocesses.
76
77SafeProcess now can terminate an external process and any subprocesses it launched, whereas formerly, on Windows, it would leave subprocesses running as orphans. This was noticed when GLI would run full-import.pl on a build, this would launch import.pl. When the build was cancelled through GLI, the full-import.pl script would be successfully terminated in Windows, but import.pl would still run to termination. A windows specific fix has been added for this, so that cancelling a build through GLI on Windows now does what Linux did by default on Java Process.destroy(): terminate any subprocesses launched by the process.
78
79
80The official JNA source code project had been moved to Github when we discovered we needed it. However, the github JNA project hasn't yet made the jar files available, despite its GettingStarted documentation starting with an instruction to download the jna.jar. See https://github.com/java-native-access/jna/blob/master/www/GettingStarted.md
81
82SafeProcess.java currently uses JNA version 4.1.0, which is from 2013. The jna-4.1.0.jar and jna-platform-4.1.0.jar were made available by the Maven MVN repository and were downloaded from https://mvnrepository.com/artifact/net.java.dev.jna/jna/4.1.0 and https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform/4.1.0. See also https://mvnrepository.com/artifact/net.java.dev.jna/jna
83
84The 2 JNA jar files were renamed to jna.jar and jna-platform.jar and were placed into gli/lib, for GLI's SafeProcess.java. This required an update to the gli/fli and makegli/makejar bash and batch scripts.
85For the GS3 source code copy of SafeProcess.java, these files will be placed in web/WEB-INF/lib and may require an update to build.xml for compiling and running.
86
Note: See TracBrowser for help on using the repository browser.