[kepler-dev] build.xml and JAVA_HOME

Aaron Schultz aschultz at nceas.ucsb.edu
Mon Apr 21 13:44:54 PDT 2008

Agreed, I included the check on JAVA_HOME because of bullet 4 in 
INSTALL.txt and also I saw that it was being used to set properties in 
the build file.  However those properties (javadir and javadirvar) are 
not used anywhere in build.xml, build-ptolemy.xml, or build-doc.xml and 
JAVA_HOME is only used in the generateDocSetup target to set 
lib/tools.jar in the classpath (which the generateDoc target runs just 
fine without).

I think cleaning up these variables and using ${basedir} to replace 
env.PTII and env.KEPLER is a good solution.  I'm unclear if not having 
PTII and KEPLER in the environment would effect anything else?  
INSTALL.txt could be modified with where PTII and kepler-docs 
directories should be placed (either in the same directory as kepler or 
as sub directories).  I'll keep playing with this as I tool up on Ant 
and learn more about the build process.


Chad Berkley wrote:
> I think these are all good ideas.  I'll add them to a post-1.0 bug.  I 
> removed the requirement for JAVA_HOME.  I hadn't realized that was in 
> there.  Aaron pointed out to me the other day that we could have an 
> error message alerting users to the state of these env. variables and 
> I asked him to add the functionality so he could learn a bit of ant 
> and have a chance to dig into the build system a bit.
> chad
> Matthew Jones wrote:
>> I agree, it would be better if we could build without requiring that 
>> JAVA_HOME is set.  For that matter, I would prefer if we didn't need 
>> to set KEPLER or PTII either.  For KEPLER, we can use the ant basedir 
>> property which is always set to the directory where the build is 
>> launched -- this would be a simple change.  Its not even clear to me 
>> that env.KEPLER is used anywhere except in the javadoc target, and it 
>> would be easily replaced with either a relative path or ${basedir}.
>> For PTII, I think we should check if PTII is set, and if so, check it 
>> and use that dir, but if not then see if ptii is found in a sibling 
>> dir of $KEPLER, and if so use that.  If both of those fail, then 
>> abort with an error saying we can't find ptii. By checking for the 
>> environment variable first, we allow people to use different versions 
>> of PTII while still making the default case where it is checked out 
>> in a sibling directory the default.
>> These changes would significantly simplify our build and eliminate 
>> the most frequently reported build problem that is reported to us.
>> Matt
>> Christopher Brooks wrote:
>>> Hi Aaron,
>>> You modified build.xml with this log message:
>>>   Added a condition to the preinit target to make sure that the
>>>   environment variables are set.  Otherwise, the build fails with a
>>>   message.
>>> The diff is:
>>> bash-3.00$ cvs diff -r 1.380 -r 1.381 build.xml
>>> Index: build.xml
>>> ===================================================================
>>> RCS file: /cvs/kepler/build.xml,v
>>> retrieving revision 1.380
>>> retrieving revision 1.381
>>> diff -r1.380 -r1.381
>>> 4,6c4,6
>>> <  *     '$Author: crawl $'
>>> <  *       '$Date: 2008/04/02 21:09:41 $'
>>> <  *   '$Revision: 1.380 $'
>>> ---
>>>>  *     '$Author: aschultz $'
>>>>  *       '$Date: 2008/04/17 23:45:07 $'
>>>>  *   '$Revision: 1.381 $'
>>> 118a119,126
>>>>       <condition property="env_ok">
>>>>          <and>
>>>>            <isset property="env.PTII"/>
>>>>            <isset property="env.KEPLER"/>
>>>>            <isset property="env.JAVA_HOME"/>
>>>>          </and>
>>>>       </condition>
>>>>       <fail message="Environment not initialized: PTII=${env.PTII} 
>>>> KEPLER=${env.KEPLER} JAVA_HOME=${env.JAVA_HOME}" unless="env_ok"/>
>>> This means that we are now requiring JAVA_HOME be set.
>>> It looks like the automatic build is failing, see
>>> ttp://nmi-s003.cs.wisc.edu/nmi/index.php?page=results/runDetails&runid=83360 
>>> If JAVA_HOME is not set, then I get this error message:
>>> bash-3.00$ ant run-dev
>>> Buildfile: build.xml
>>> preinit:
>>> /export/home1/cxh/src/kepler/build.xml:126: Environment not 
>>> initialized: PTII=/home/eecs/cxh/ptII 
>>> KEPLER=/home/eecs/cxh/src/kepler JAVA_HOME=${env.JAVA_HOME}
>>> Total time: 1 second
>>> bash-3.00$
>>> I looked at this message and had no clue that I had to set JAVA_HOME.
>>> Perhaps the error message could be more explicit, perhaps each
>>> variable could be checked separately?
>>> However, it it really necessary that JAVA_HOME be set?  Can't we
>>> determine this programmatically?  The problem is that if the
>>> java in the user's path and JAVA_HOME are different, then there
>>> will be problems.
>>> In Ptolemy II, we compile and invoke ptII/config/JavaHome.java,
>>> which will tell us the value of the java.home property.
>>> What was the error message that you were seeing?  Did it have
>>> to do with compiling PtDoclet.java, which requires
>>> ${JAVA_HOME}/lib/tools.jar?
>>> I'm not sure how best to handle this in ant, but is there
>>> a way that ant can compile a Java program and use that value?
>>> I'm somewhat resistant to have the user set JAVA_HOME, I've
>>> found that it ends up causing no end of support problems.
>>> BTW - The ant docs say that JAVA_HOME must be set, but the reality
>>> is that ant works ok without JAvA_HOME being set.  IMHO - it is a 
>>> bug in ant that I'm asked to set JAVA_HOME.
>>> _Christopher
>>> _______________________________________________
>>> Kepler-dev mailing list
>>> Kepler-dev at ecoinformatics.org
>>> http://mercury.nceas.ucsb.edu/ecoinformatics/mailman/listinfo/kepler-dev 

More information about the Kepler-dev mailing list