RE: Multiple source roots?
Rob Walker <[email protected]> Sun, 21 Sep 2025 08:33:19 +0000
| Newsgroups | gmane.comp.java.ide.netbeans.user |
|---|---|
| Message-ID | <MW4PR14MB4636211A6A8F19D1BA243EECAF13A@MW4PR14MB4636.namprd14.prod.outlook.com> |
Just a tip on the specific example below.
If your “generated” dir is from a tool also running in Gradle, then you can add the extra source dir within that task – and can (should really) also declare your output dirs. An example of the start of our Antlr task:
task generateGrammarSource {
description = 'Generates Java sources from Antlr2 grammars.'
inputs.files grammarFiles
outputs.dir file(antlrGeneratedSrcDir)
// Make sure generated sources are included in Java set (also ensures Netbeans picks them!)
project.sourceSets.matching { it.name == "main" } .all {
it.java.srcDir "${antlrGeneratedSrcDir}"
}
If you do it this way, you get 2 benefits:
* Gradle knows to rerun the tool (Antlr in the above) if the input sources change
* The NB gradle handling knows about the outputs too and resolves them properly when finding sources
It took us a couple of spins to come to this approach, but it’s worth it. We do the same with GWT, XmlBeans schema handling, and a couple of other generators our codebase uses
-Rob
From: Ulrich Mayring <[email protected]>
Sent: 20 September 2025 17:42
To: Scott Palmer <[email protected]>
Cc: [email protected]
Subject: Re: Multiple source roots?
Am Samstag, September 20, 2025 16:59 CEST, schrieb Scott Palmer <[email protected]<mailto:[email protected]>>:
Back on topic… Multiple sources roots are trivial with Gradle:
sourceSets {
main {
java {
srcDir 'src/main/java'
srcDir 'generated/src/main/java' // Add a generated source directory
}
resources {
srcDir 'src/main/resources'
srcDir 'src/main/config' // Add another resource directory
}
}
}
To be fair, how does that show up in Netbeans, namely the project properties dialog?
I think there is a certain lack of cohesion there. Some build systems only allow one source root, others allow many - how do you design a UI for that?