Alan. I never used srcpath before and after some trial and error I feel that
the source of the problem is bad description of the option in JDK.
Ant passes srcpath directly to JDK's javac (unlike srcdir which Ant itself
searches for java files).
The description says "Specify" or "Specifies", but it actually "overrides" the
default. And the default is current dir ".".
The other important thing the short description doesn't mention is javac won't
compile all source files in srcpath, but only those needed by explicitly listed
source files.
So by default javac will look in the current dir for source files needed to
compile explicitly listed source files.
You probably want all sources in "a" and "b" to be compiled so you shouldn't
use srcpath for them.
Finally, javac does not accept fileset as <src> or srcdir. In your example "p"
was consisting of java files and it was wasn't failing for you because it was
used as srcpath and srcpath was never scanned by javac because all needed
sources were found in srcdir.
Ant docs could be better too. I wasn't able to find examples of <src
refid=.../> on the site.
Please try my variant:
<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="t" basedir=".">
<path id="p">
<path path="a"/>
<path path="b"/>
</path>
<target name="t">
<javac>
<src refid="p"/>
</javac>
</target>
</project>
-------- Original Message --------
From: Alan Snyder [mailto:[email protected]]
Sent: Wednesday, December 20, 2023 at 23:37 UTC
To: Ant Users List
Subject: javac task question
This actually does what I want:
<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="t" basedir=".">
<path id="p">
<fileset dir="a"/>
<fileset dir="b"/>
</path>
<target name="t">
<javac srcdir="." sourcepathref="p"/>
</target>
</project>
The problem is that I don’t really want to specify srcdir, but if I leave it
out, the build fails (see below).
I would need to create a fake directory to use as srcdir to be sure that I
don’t accidentally compile unwanted sources.
Apache Ant(TM) version 1.10.14 compiled on August 16 2023
Trying the default build file: build.xml
Buildfile: /Users/alan/testAnt1/build.xml
Detected Java version: 21 in:
/Library/Java/JavaVirtualMachines/jdk-21.0.1.jdk/Contents/Home
Detected OS: Mac OS X
parsing buildfile /Users/alan/testAnt1/build.xml with URI =
file:/Users/alan/testAnt1/build.xml
Project base dir set to: /Users/alan/testAnt1
parsing buildfile
jar:file:/Users/alan/.ant/lib/vbuilder-ant-uber-1.0-SNAPSHOT.jar!/org/apache/tools/ant/antlib.xml
with URI =
jar:file:/Users/alan/.ant/lib/vbuilder-ant-uber-1.0-SNAPSHOT.jar!/org/apache/tools/ant/antlib.xml
from a zip file
parsing buildfile
jar:file:/usr/local/ant/lib/ant.jar!/org/apache/tools/ant/antlib.xml with URI =
jar:file:/usr/local/ant/lib/ant.jar!/org/apache/tools/ant/antlib.xml from a zip
file
Build sequence for target(s) `t' is [t]
Complete build sequence is [t, ]
t:
BUILD FAILED
/Users/alan/testAnt1/build.xml:11: either srcdir or modulesourcepath attribute
must be set!
at org.apache.tools.ant.taskdefs.Javac.checkParameters(Javac.java:1309)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:1080)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:299)
at
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at
org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
at org.apache.tools.ant.Task.perform(Task.java:350)
at org.apache.tools.ant.Target.execute(Target.java:449)
at org.apache.tools.ant.Target.performTasks(Target.java:470)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1401)
at org.apache.tools.ant.Project.executeTarget(Project.java:1374)
at
org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1264)
at org.apache.tools.ant.Main.runBuild(Main.java:818)
at org.apache.tools.ant.Main.startAnt(Main.java:223)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:284)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)
Total time: 0 seconds
On Dec 19, 2023, at 10:17 PM, Jaikiran Pai <[email protected]> wrote:
Hello Alan,
It's hard to say what's going on. Do you have a build file (or a snippet) to
show what issue you are running into?
Which version of Java and Ant is this showing up on?
-Jaikiran
On 18/12/23 1:44 am, Alan Snyder wrote:
I know of a couple of ways to run javac on more than one source tree.
One way is to use nested src elements.
Another way is like this:
srcdir="${src}:${src2}”
I would like to generalize this solution to a dynamicly determined list of
source trees.
I thought that I could use srcpath for this purpose, but the task would fail if
srcdir was not specified or it did not identify a valid directory.
That restriction defeats my purpose.
Is there a solution?
Is the inability to use srcpath by itself a bug?
Thank you.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]