windows .bat files seem to have typo

User 02c7249dc6

05-01-2010 17:50:02

Using the windows installer, I think the batch files have a typo that results in them ingnoring the JCHEMHOME environment variable if set.  This results in class not found exceptions.


I'm on windows and use cygwin, if I don't use the windows installer and instead install the cross platform zip, the bash scrips work fine.  The issue showed up when used the windows installer which only installs the bat files.


after using the windows installer, I followed the instructions on file:///C:/Program%20Files/ChemAxon/JChem/doc/admin/prepscripts.html


and set up a JCHEMHOME variable


however, the bat files were failing with class not found exceptions.


Exception in thread "main" java.lang.NoClassDefFoundError: chemaxon/marvin/View
Caused by: java.lang.ClassNotFoundException: chemaxon.marvin.View
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: chemaxon.marvin.View.  Program will exit.


I looked at the bat files and they all have a fragment like:


set INSTALLDIR="@JCHEMHOM@"
if exist %INSTALLDIR%. (


    set SETUPBAT="@JCHEMHOME@"


    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"


    GOTO AFTER_CLASSPATH


)


here, INSTALLDIR is actually set to '@JCHEMHOME@' which doesn't exist so the if block is never entered.


Instead, I updated one of the batch files to the following:


set INSTALLDIR="%JCHEMHOME%"
if exist %INSTALLDIR%. (
    set SETUPBAT="%INSTALLDIR%\bin\setup.bat"
    set JCHEMCLASSPATH="%INSTALLDIR%\lib\jchem.jar;%CLASSPATH%"
    GOTO AFTER_CLASSPATH
)


changes:


1) use % instead of @ to resolve the variable


2) if the install dir exists setup the the SETUPBAT and JCHEMCLASSPATH relative to it.


This worked for the one batch file I tried.


I grepped the other batch files and most seemed broken


egrep -B1 -A4 'INSTALLDIR%' *


bm.bat-set INSTALLDIR="@JCHEMHOM@"
bm.bat:if exist %INSTALLDIR%. (
bm.bat-    set SETUPBAT="@JCHEMHOME@"
bm.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
bm.bat-    GOTO AFTER_CLASSPATH
bm.bat-)
--
compr.bat-set INSTALLDIR="@JCHEMHOM@"
compr.bat:if exist %INSTALLDIR%. (
compr.bat-    set SETUPBAT="@JCHEMHOME@"
compr.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
compr.bat-    GOTO AFTER_CLASSPATH
compr.bat-)
--
config.bat-set INSTALLDIR="@JCHEMHOM@"
config.bat:if exist %INSTALLDIR%. (
config.bat-    set SETUPBAT="@JCHEMHOME@"
config.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
config.bat-    GOTO AFTER_CLASSPATH
config.bat-)
--
count.bat-set INSTALLDIR="@JCHEMHOM@"
count.bat:if exist %INSTALLDIR%. (
count.bat-    set SETUPBAT="@JCHEMHOME@"
count.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
count.bat-    GOTO AFTER_CLASSPATH
count.bat-)
--
crview.bat-set INSTALLDIR="@JCHEMHOM@"
crview.bat:if exist %INSTALLDIR%. (
crview.bat-    set SETUPBAT="@JCHEMHOME@"
crview.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
crview.bat-    GOTO AFTER_CLASSPATH
crview.bat-)
--
cxcalc.bat-set INSTALLDIR="@JCHEMHOM@"
cxcalc.bat:if exist %INSTALLDIR%. (
cxcalc.bat-    set SETUPBAT="@JCHEMHOME@"
cxcalc.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
cxcalc.bat-    GOTO AFTER_CLASSPATH
cxcalc.bat-)
--
enumerate.bat-set INSTALLDIR="@JCHEMHOM@"
enumerate.bat:if exist %INSTALLDIR%. (
enumerate.bat-    set SETUPBAT="@JCHEMHOME@"
enumerate.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
enumerate.bat-    GOTO AFTER_CLASSPATH
enumerate.bat-)
--
evaluate.bat-set INSTALLDIR="@JCHEMHOM@"
evaluate.bat:if exist %INSTALLDIR%. (
evaluate.bat-    set SETUPBAT="@JCHEMHOME@"
evaluate.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
evaluate.bat-    GOTO AFTER_CLASSPATH
evaluate.bat-)
--
exampleCount.bat-set INSTALLDIR="@JCHEMHOM@"
exampleCount.bat:if exist %INSTALLDIR%. (
exampleCount.bat-    set SETUPBAT="@JCHEMHOME@"
exampleCount.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
exampleCount.bat-    GOTO AFTER_CLASSPATH
exampleCount.bat-)
--
fragment.bat-set INSTALLDIR="@JCHEMHOM@"
fragment.bat:if exist %INSTALLDIR%. (
fragment.bat-    set SETUPBAT="@JCHEMHOME@"
fragment.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
fragment.bat-    GOTO AFTER_CLASSPATH
fragment.bat-)
--
fragstat.bat-set INSTALLDIR="@JCHEMHOM@"
fragstat.bat:if exist %INSTALLDIR%. (
fragstat.bat-    set SETUPBAT="@JCHEMHOME@"
fragstat.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
fragstat.bat-    GOTO AFTER_CLASSPATH
fragstat.bat-)
--
generatemd.bat-set INSTALLDIR="@JCHEMHOM@"
generatemd.bat:if exist %INSTALLDIR%. (
generatemd.bat-    set SETUPBAT="@JCHEMHOME@"
generatemd.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
generatemd.bat-    GOTO AFTER_CLASSPATH
generatemd.bat-)
--
generfp.bat-set INSTALLDIR="@JCHEMHOM@"
generfp.bat:if exist %INSTALLDIR%. (
generfp.bat-    set SETUPBAT="@JCHEMHOME@"
generfp.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
generfp.bat-    GOTO AFTER_CLASSPATH
generfp.bat-)
--
hitstatistics.bat-set INSTALLDIR="@JCHEMHOM@"
hitstatistics.bat:if exist %INSTALLDIR%. (
hitstatistics.bat-    set SETUPBAT="@JCHEMHOME@"
hitstatistics.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
hitstatistics.bat-    GOTO AFTER_CLASSPATH
hitstatistics.bat-)
--
jarp.bat-set INSTALLDIR="@JCHEMHOM@"
jarp.bat:if exist %INSTALLDIR%. (
jarp.bat-    set SETUPBAT="@JCHEMHOME@"
jarp.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
jarp.bat-    GOTO AFTER_CLASSPATH
jarp.bat-)
--
jcman.bat-set INSTALLDIR="@JCHEMHOM@"
jcman.bat:if exist %INSTALLDIR%. (
jcman.bat-    set SETUPBAT="@JCHEMHOME@"
jcman.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
jcman.bat-    GOTO AFTER_CLASSPATH
jcman.bat-)
--
jcsearch.bat-set INSTALLDIR="@JCHEMHOM@"
jcsearch.bat:if exist %INSTALLDIR%. (
jcsearch.bat-    set SETUPBAT="@JCHEMHOME@"
jcsearch.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
jcsearch.bat-    GOTO AFTER_CLASSPATH
jcsearch.bat-)
--
libmcs.bat-set INSTALLDIR="@JCHEMHOM@"
libmcs.bat:if exist %INSTALLDIR%. (
libmcs.bat-    set SETUPBAT="@JCHEMHOME@"
libmcs.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
libmcs.bat-    GOTO AFTER_CLASSPATH
libmcs.bat-)
--
license.bat-set INSTALLDIR="@JCHEMHOM@"
license.bat:if exist %INSTALLDIR%. (
license.bat-    set SETUPBAT="@JCHEMHOME@"
license.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
license.bat-    GOTO AFTER_CLASSPATH
license.bat-)
--
mcs.bat-set INSTALLDIR="@JCHEMHOM@"
mcs.bat:if exist %INSTALLDIR%. (
mcs.bat-    set SETUPBAT="@JCHEMHOME@"
mcs.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
mcs.bat-    GOTO AFTER_CLASSPATH
mcs.bat-)
--
metabolize.bat-set INSTALLDIR="@JCHEMHOM@"
metabolize.bat:if exist %INSTALLDIR%. (
metabolize.bat-    set SETUPBAT="@JCHEMHOME@"
metabolize.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
metabolize.bat-    GOTO AFTER_CLASSPATH
metabolize.bat-)
--
molconvert.bat-set INSTALLDIR="@JCHEMHOM@"
molconvert.bat:if exist %INSTALLDIR%. (
molconvert.bat-    set SETUPBAT="@JCHEMHOME@"
molconvert.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
molconvert.bat-    GOTO AFTER_CLASSPATH
molconvert.bat-)
--
moledit.bat-set INSTALLDIR="@JCHEMHOM@"
moledit.bat:if exist %INSTALLDIR%. (
moledit.bat-    set SETUPBAT="@JCHEMHOME@"
moledit.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
moledit.bat-    GOTO AFTER_CLASSPATH
moledit.bat-)
--
molfragment.bat-set INSTALLDIR="@JCHEMHOM@"
molfragment.bat:if exist %INSTALLDIR%. (
molfragment.bat-    set SETUPBAT="@JCHEMHOME@"
molfragment.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
molfragment.bat-    GOTO AFTER_CLASSPATH
molfragment.bat-)
--
msketch.bat-set INSTALLDIR="@JCHEMHOM@"
msketch.bat:if exist %INSTALLDIR%. (
msketch.bat-    set SETUPBAT="@JCHEMHOME@"
msketch.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
msketch.bat-    GOTO AFTER_CLASSPATH
msketch.bat-)
--
mspace.bat-set INSTALLDIR="@JCHEMHOM@"
mspace.bat:if exist %INSTALLDIR%. (
mspace.bat-    set SETUPBAT="@JCHEMHOME@"
mspace.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
mspace.bat-    GOTO AFTER_CLASSPATH
mspace.bat-)
--
mview.bat-set INSTALLDIR="%JCHEMHOME%"
mview.bat:if exist %INSTALLDIR%. (
mview.bat:    set SETUPBAT="%INSTALLDIR%\bin\setup.bat"
mview.bat:    set JCHEMCLASSPATH="%INSTALLDIR%\lib\jchem.jar;%CLASSPATH%"
mview.bat-    GOTO AFTER_CLASSPATH
mview.bat-)
mview.bat-
mview.bat-set SETUPBAT="..\bin\setup.bat"
--
nneib.bat-set INSTALLDIR="@JCHEMHOM@"
nneib.bat:if exist %INSTALLDIR%. (
nneib.bat-    set SETUPBAT="@JCHEMHOME@"
nneib.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
nneib.bat-    GOTO AFTER_CLASSPATH
nneib.bat-)
--
optimizemetrics.bat-set INSTALLDIR="@JCHEMHOM@"
optimizemetrics.bat:if exist %INSTALLDIR%. (
optimizemetrics.bat-    set SETUPBAT="@JCHEMHOME@"
optimizemetrics.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
optimizemetrics.bat-    GOTO AFTER_CLASSPATH
optimizemetrics.bat-)
--
pmapper.bat-set INSTALLDIR="@JCHEMHOM@"
pmapper.bat:if exist %INSTALLDIR%. (
pmapper.bat-    set SETUPBAT="@JCHEMHOME@"
pmapper.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
pmapper.bat-    GOTO AFTER_CLASSPATH
pmapper.bat-)
--
react.bat-set INSTALLDIR="@JCHEMHOM@"
react.bat:if exist %INSTALLDIR%. (
react.bat-    set SETUPBAT="@JCHEMHOME@"
react.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
react.bat-    GOTO AFTER_CLASSPATH
react.bat-)
--
reactionTester.bat-set INSTALLDIR="@JCHEMHOM@"
reactionTester.bat:if exist %INSTALLDIR%. (
reactionTester.bat-    set SETUPBAT="@JCHEMHOME@"
reactionTester.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
reactionTester.bat-    GOTO AFTER_CLASSPATH
reactionTester.bat-)
--
rgdecomp.bat-set INSTALLDIR="@JCHEMHOM@"
rgdecomp.bat:if exist %INSTALLDIR%. (
rgdecomp.bat-    set SETUPBAT="@JCHEMHOME@"
rgdecomp.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
rgdecomp.bat-    GOTO AFTER_CLASSPATH
rgdecomp.bat-)
--
rmap.bat-set INSTALLDIR="@JCHEMHOM@"
rmap.bat:if exist %INSTALLDIR%. (
rmap.bat-    set SETUPBAT="@JCHEMHOME@"
rmap.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
rmap.bat-    GOTO AFTER_CLASSPATH
rmap.bat-)
--
rtest.bat-set INSTALLDIR="@JCHEMHOM@"
rtest.bat:if exist %INSTALLDIR%. (
rtest.bat-    set SETUPBAT="@JCHEMHOME@"
rtest.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
rtest.bat-    GOTO AFTER_CLASSPATH
rtest.bat-)
--
screeningoptimizer.bat-set INSTALLDIR="@JCHEMHOM@"
screeningoptimizer.bat:if exist %INSTALLDIR%. (
screeningoptimizer.bat-    set SETUPBAT="@JCHEMHOME@"
screeningoptimizer.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
screeningoptimizer.bat-    GOTO AFTER_CLASSPATH
screeningoptimizer.bat-)
--
screenmd.bat-set INSTALLDIR="@JCHEMHOM@"
screenmd.bat:if exist %INSTALLDIR%. (
screenmd.bat-    set SETUPBAT="@JCHEMHOME@"
screenmd.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
screenmd.bat-    GOTO AFTER_CLASSPATH
screenmd.bat-)
--
standardize.bat-set INSTALLDIR="@JCHEMHOM@"
standardize.bat:if exist %INSTALLDIR%. (
standardize.bat-    set SETUPBAT="@JCHEMHOME@"
standardize.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
standardize.bat-    GOTO AFTER_CLASSPATH
standardize.bat-)
--
standedit.bat-set INSTALLDIR="@JCHEMHOM@"
standedit.bat:if exist %INSTALLDIR%. (
standedit.bat-    set SETUPBAT="@JCHEMHOME@"
standedit.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
standedit.bat-    GOTO AFTER_CLASSPATH
standedit.bat-)
--
toxic.bat-set INSTALLDIR="@JCHEMHOM@"
toxic.bat:if exist %INSTALLDIR%. (
toxic.bat-    set SETUPBAT="@JCHEMHOME@"
toxic.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
toxic.bat-    GOTO AFTER_CLASSPATH
toxic.bat-)
--
toxicView.bat-set INSTALLDIR="@JCHEMHOM@"
toxicView.bat:if exist %INSTALLDIR%. (
toxicView.bat-    set SETUPBAT="@JCHEMHOME@"
toxicView.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
toxicView.bat-    GOTO AFTER_CLASSPATH
toxicView.bat-)
--
toxiccalc.bat-set INSTALLDIR="@JCHEMHOM@"
toxiccalc.bat:if exist %INSTALLDIR%. (
toxiccalc.bat-    set SETUPBAT="@JCHEMHOME@"
toxiccalc.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
toxiccalc.bat-    GOTO AFTER_CLASSPATH
toxiccalc.bat-)
--
toxicophore.bat-set INSTALLDIR="@JCHEMHOM@"
toxicophore.bat:if exist %INSTALLDIR%. (
toxicophore.bat-    set SETUPBAT="@JCHEMHOME@"
toxicophore.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
toxicophore.bat-    GOTO AFTER_CLASSPATH
toxicophore.bat-)
--
ward.bat-set INSTALLDIR="@JCHEMHOM@"
ward.bat:if exist %INSTALLDIR%. (
ward.bat-    set SETUPBAT="@JCHEMHOME@"
ward.bat-    set JCHEMCLASSPATH="@JCHEMHOME@\lib\jchem.jar;%CLASSPATH%"
ward.bat-    GOTO AFTER_CLASSPATH
ward.bat-)


Hope this is helpful.


Dan

ChemAxon 7c2d26e5cf

05-01-2010 23:59:37

Thanks for the bug report.


We have fixed it immediately in JChem sources.


The updated scripts will be available in the next release (in a couple of day).


Thanks for suggestions to fix this bug but finally I have chosen another solution.


Since now, the installer write the target directory of JChem installation in the script (substitute @JCHEMHOME@ patter to this value). If installer is not available (cross platform version), the value of JCHEMHOME system variable is prefered. If neither installer nor JCHEMHOME are available, script uses relative path (..). In this case, script works only from jchem/bin directory where the script is located.

User 02c7249dc6

06-01-2010 02:48:01

Tamas,


Thanks for fixing this so quickly.


Your solution sounds good, however, I think I'd prefer that the JCHEMHOME property be used if defined as an environment variable even if the windows installer was used and the @JCHEMHOME@ tag had been replaced at install time.


This would make it easy to switch between different versions of Jchem for testing etc without any dependency on how jchem was installed.


However, this is just my opinion, so take it for what it's worth.


One additional suggestion, if you haven't done it already, would be to update the docs on jchem/doc/admin/prepscripts.html to explain that with the windows installer the scripts should just work. However, if the cross platform zip file was used, an environment variable is required.


Again, thanks for the reply.


Cheers,


Dan

ChemAxon 7c2d26e5cf

06-01-2010 03:08:15


Your solution sounds good, however, I think
I'd prefer that the JCHEMHOME property be used if defined as an
environment variable even if the windows installer was used and the
@JCHEMHOME@ tag had been replaced at install time.

This would make it easy to switch between different versions of
Jchem for testing etc without any dependency on how jchem was installed.


Sorry, but I do not agree with you. Referring to an other JChem instance from the installed JChem version is dangerous. It has got more disadvantages than advantages.


It can be missleading when you would like to try out the newly installed JChem, meanwhile JCHEMHOME still points to an elder JChem version. I think most of the user would not underdstand why the old version was launched by the script instead of the new one. Furthermore the JChem exe files always refer to their own JChem package, JCHEMHOME variable never influence their usage. If exe files and batch script from the same Jchem folder point to different JChem versions, it can confuse the user.


If you would like to use several JChem version on the same machine, you can install them into various folders.


ChemAxon 7c2d26e5cf

07-01-2010 15:37:05

We have created a patch for 5.2.x JChem releases for Windows.


This patch overwrites your batch scripts in jchem/bin and the bundled configuration script set the proper references in the updated batch scripts.


Do the following steps:


- Download jchem-5_2-windows-bin-patch.zip.


- Extract the zip file in the bin subfolder of your installed jchem package (e.g.: C:\Program Files\ChemAxon\JChem\bin).


- Open a command prompt window (cmd) and navigate to the folder where zip file has been extracted (C:\Program Files\ChemAxon\JChem\bin) and launch batchsetup.bat in the command prompt.


The batchsetup.bat replaces @JCHEMHOME@ pattern to the absolute path of the jchem folder. After that you can launch any jchem batch script from anywhere on your computer if you give the location of the certain batch.


This patch work also with cross platform jchem installer.


From JChem 5.3, this jchem patch will be needless because batch scripts are correct in upcomming releases.

User 02c7249dc6

07-01-2010 16:11:18

Thanks, Tamas.


I tested out the fix and everything looks good.


Dan