----- Original Message -----
From: "Matt Benson" <[EMAIL PROTECTED]>
To: "Ant Users List" <user@ant.apache.org>
Sent: Friday, February 10, 2006 11:01 AM
Subject: Re: Displaying the value in a Java class?
--- Rhino <[EMAIL PROTECTED]> wrote:
[I've lost the original email containing this thread
but I found it in the
MARC archives and pasted it below the line of equal
signs....]
Matt,
You are absolutely right, it was NOT _remotely_
obvious that BCEL has to be
present in order for LoadProperties to work. If you
hadn't posted that fact,
I would never have found that in the manual, for
several reasons:
1. LoadProperties is a core task so I would have
assumed that it wouldn't
need extra jars. It's my understanding that core
tasks, by definition, are
ones that don't need extra jars to work. Apparently,
this is not true; even
a core task may need extra jars in somes cases.
2. The article on LoadProperties doesn't mention the
need for BCEL to be
present.
It's not loadproperties that needs BCEL; it's the
classconstants filterchain.
Yes, I understand that but I looked in the loadproperties article assuming
it was the one that might explain why I was getting the I/O error. I agree
that the explanation doesn't really belong there but it seemed like a
reasonable place to look before I knew what the problem was.
I wonder if there shouldn't be a note or warning or something in all of the
tasks that can use filterchains, such as loadproperties, loadfiles, etc., to
the effect that anyone using the classconstants filterchain should be sure
to install BCEL?
3. The article on FilterChains doesn't mention the
need for BCEL to be
present.
There should be a link; will add.
Excellent!
Even if I had looked at the optional jars page, I
might have missed it
because I would have been looking for filterchains
or loadproperties in the
second column of the table, not specifically
"ClassConstants filter reader".
So thank you VERY much for pointing that out. As
soon as I installed BCEL, I
found that my task executed without the
IOExceptions.
Unfortunately, I still have one problem that may
keep this from being the
solution to my problem after all: the ClassConstants
filter reader
apparently only gets information about _String_
constants (it only returned
values for the Strings in my .class file but no
other types) but the
constant I am trying to read is defined as follows:
public static final EmploymentHistoryFormats
DESIRED_EMPLOYMENT_HISTORY_FORMAT =
EmploymentHistoryFormats.LIST_FORMAT;
EmploymentHistoryFormats is an enum, not a String.
Is there any way to coax this filter to tell me that
the current value of
DESIRED_EMPLOYMENT_HISTORY_FORMAT is LIST_FORMAT?
That's all I really want
to know to get my build.xml working 100%.
If not, is there any other way to get this
information?
filter the Java file w/ regex looking for
"^[\s]*public static final EmploymentHistoryFormats
DESIRED_EMPLOYMENT_HISTORY_FORMAT[\s]*=[\s]*([^;]+);[\s]*$"
and replace w/ "\1"?
Your suggestion is a bit cryptic for me to follow completely. Are you saying
I should use a ContainsRegex filter but still within LoadProperties? Or are
you proposing that I use LoadFiles and the .java file instead of the
ClassConstants filter?
And why do you want to replace anything? I just want to know the value of
the constant, not change it. (Although, now that I think about it, it might
be neat to be able to let the user modify the value before doing the rest of
the build.... But I don't think that's what you're talking about, right?
--
Rhino
--
Rhino
=================================================================
I thought the manual was wrong at first too, but
using
a class file is correct. What is not as obvious is
that you need BCEL to make it work. This is
documented in install.html#librarydependencies from
the manual.
HTH,
Matt
--- Rhino <[EMAIL PROTECTED]> wrote:
> The classcontents filterreader might very well be
> exactly what I want - if I
> could understand how to use it!
>
> I've just tried several experiments and nothing
> works for me; nothing at
> all.
>
> I must be misunderstanding some of the concepts.
For
> instance, it _looks_ as
> if I should be able to read a file, grab all the
> constants from it, and turn
> them into properties. But I can't make out if I'm
> supposed to reading a
> class file or a source file: it _looks_ as if I
> should be reading a class
> file, which seems counterintuitive to me.
> Nevertheless, I've tried pointing
> the task at both a real .class file and at a real
> Java source file in turn
> but I inevitably get "Unable to load file:
> java.io.IOException" regardless
> of which I use. Here is my task:
>
> <loadproperties srcfile="ResumeConstants.java">
>
> <filterchain>
>
> <classconstants/>
>
> </filterchain>
>
> </loadproperties>
>
>
>
> (Replacing the srcfile value with
> "ResumeConstants.class" made no difference
> at all. Both the source and the class file are in
> the same directory as the
> Ant script itself, just to keep things nice and
> simple.)
>
> Here is the stackTrace:
>
> BUILD FAILED
>
>
E:\eclipse\3.1.1\eclipse\workspace\Resume_JDK_1.5.0\xml\filter.xml:34:
>
> Unable to load file: java.io.IOException
>
> at
>
org.apache.tools.ant.taskdefs.LoadProperties.execute(LoadProperties.java:227)
>
> at
>
org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
>
> at
org.apache.tools.ant.Task.perform(Task.java:364)
>
> at
>
org.apache.tools.ant.Target.execute(Target.java:341)
>
> at
>
org.apache.tools.ant.Target.performTasks(Target.java:369)
>
> at
>
org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
>
> at
>
org.apache.tools.ant.Project.executeTarget(Project.java:1185)
>
> at
>
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
>
> at
>
org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDe
\
faultExecutor.java:32)
>
> at
>
org.apache.tools.ant.Project.executeTargets(Project.java:1068)
>
> at
>
org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:42
\
3)
>
> at
>
org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:1
\
37)
>
> Caused by: java.io.IOException
>
> at
>
org.apache.tools.ant.filters.ClassConstants.read(ClassConstants.java:136)
>
> at
>
org.apache.tools.ant.filters.BaseFilterReader.read(BaseFilterReader.java:86)
>
> at java.io.Reader.read(Unknown Source)
=== message truncated ===
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.375 / Virus Database: 267.15.5/256 - Release Date: 10/02/2006
--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.375 / Virus Database: 267.15.5/256 - Release Date: 10/02/2006
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]