db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "John Storta Jr. (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-4341) Building with ant all with a different CLASSPATH defined causes the build to fail
Date Mon, 15 Feb 2010 18:03:27 GMT

    [ https://issues.apache.org/jira/browse/DERBY-4341?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12833904#action_12833904
] 

John Storta Jr. commented on DERBY-4341:
----------------------------------------

I have been digging into this for a while and the more I read about ant the more it becomes
clear that ant runs best when CLASSPATH is not set at all.  The ant documentation has a whole
section about the classpath.

http://ant.apache.org/manual/install.html
Section: "The CLASSPATH environment variable"

The gist of it is that you should not run ant with CLASSPATH set.  And if you do, you should
run ant with the -noclasspath option as I had indicated in the workaround section.

They also include the following code as something that you can add to your build.xml file
to error out if the CLASSPATH is set.
<property environment="env."/>
<property name="env.CLASSPATH" value=""/>
    <fail message="Unset $CLASSPATH / %CLASSPATH% before running Ant!">
        <condition>
            <not><equals arg1="${env.CLASSPATH}" arg2=""/></not>
        </condition>
    </fail>

This essentially checks if your CLASSPATH is set and reports a relevant error message.

I've tested it at the top of the build.xml and also within the runmessagecheck target.  With
this in place, the build will fail with a message indicating the problem and how to fix it,
which is at least clearer than just getting errors about missing messages.

Below is my modified version of the runmessagecheck target.
  <!-- Run the MessageBundleTest -->
  <target name="runmessagecheck">
    <property environment="env."/>
    <property name="env.CLASSPATH" value=""/>
    <fail message="Unset $CLASSPATH / %CLASSPATH% before running Ant!">
        <condition>
            <not><equals arg1="${env.CLASSPATH}" arg2=""/></not>
        </condition>
    </fail>

    <taskdef 
      name="runMessageBundleTest"
      classname="org.apache.derbyBuild.MessageBundleTest"
      classpath="${out.dir}"
    />
    <runMessageBundleTest/>
  </target>


The test could also be put at the top of the build.xml if we want to fail out any time CLASSPATH
is set rather than just from within this one target.  I could see this same situation occurring
with other targets and with it apparently never being a good idea to have the CLASSPATH set,
we might want to avoid the case of getting additional bugs down the road as new targets exhibit
the issue.

In my opinion, the solution that matches what ant recommends is to update the documentation
to reflect that ant should be run without the CLASSPATH set (or with the -noclasspath option)

As a separate item, we can add the code I indicated to the appropriate place in build.xml
to catch cases where it would fail so that a meaningful message is displayed.  One thing to
keep in mind if the build.xml is changed.  If you have CLASSPATH set AND use the -noclasspath
option, the code will still result in the fail since it does not check the -noclasspath option.
 I am seeing if there is a way to also test for the -noclasspath option.




> Building with ant all with a different CLASSPATH defined causes the build to fail
> ---------------------------------------------------------------------------------
>
>                 Key: DERBY-4341
>                 URL: https://issues.apache.org/jira/browse/DERBY-4341
>             Project: Derby
>          Issue Type: Bug
>          Components: Build tools
>    Affects Versions: 10.6.0.0
>            Reporter: Tiago R. Espinha
>            Assignee: John Storta Jr.
>
> The problem happens when we are trying to compile the source code in a folder and have
the CLASSPATH variable set to a different code tree folder. This results in compile failures
like the following:
> runmessagecheck:
> [runMessageBundleTest] WARNING: Message id 22011.S.1 in messages_en.properties is not
referenced in either SQLState.java or MessageId.java
> [runMessageBundleTest] WARNING: Message id 42Y03.S.0 in messages_en.properties is not
referenced in either SQLState.java or MessageId.java
> [runMessageBundleTest] WARNING: Message id 42Y03.S.1 in messages_en.properties is not
referenced in either SQLState.java or MessageId.java
> [runMessageBundleTest] WARNING: Message id 42Y03.S.2 in messages_en.properties is not
referenced in either SQLState.java or MessageId.java
> BUILD FAILED
> /home/tiago/Desktop/DerbyStuff/CodeTenFiveTwo/build.xml:514: Message check failed. 
> See error in build output or call ant runmessagecheck.
> Total time: 1 minute 11 seconds
> This should be an easy fix and it is marked as a bug, since it doesn't seem very logical
for the compiling process to be CLASSPATH-dependent. Note that unsetting the CLASSPATH altogether
allows the compile to run without errors, so clearly this variable isn't needed and shouldn't
be used when it is set.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message