Closed DeanWookey closed 5 years ago
My sub projects can't see each other's source files now, so I guess that null tells netbeans the sources aren't external?
I did a quick check on your commit and if I understand the code correctly, you try to lookup the sources in .m2. This shouldn't be necessary as sources in .m2 are handled by the Maven plugin of NB. Do you have the Maven support disabled? Also, I definitely can't merge this, the check in the beginning is critical: Otherwise this query might steal work from other queries (which should now better). That is, this query is only meant to handle the Gradle cache. Other checks should be in a separate BinaryForSource/SourceForBinary implementation.
I have local maven repositories defined as follows:
repositories {
mavenCentral()
maven {
url "file://${rootDir}/../Repository"
}
}
Netbeans doesn't find the source jars in that case because gradle doesn't download them to the cache.
I should've created an issue first, but I got carried away in my investigations. I'll investigate the maven plugin, whether that's working etc. Then I'll take a look if there's a better way to do this. I admit I don't really know my way around the code. Thanks for explaining how it works.
My maven plugin is working and I still have the problem where there's no source for anything in a local repository (even though the source files are there). I've created an example application here: https://github.com/DeanWookey/NetbeansGradleMavenLocalTest.
If this is a problem on your end too, would the correct way to go about solving it be to create something like:
org.netbeans.gradle.project.query.MavenLocalBinaryForSourceQuery.java
org.netbeans.gradle.project.query.MavenLocalByBinaryLookup.java
org.netbeans.gradle.project.query.MavenLocalJavadocForBinaryQuery.java
org.netbeans.gradle.project.query.MavenLocalSourceForBinaryQuery.java
, leave the other queries unchanged, and create associated tests?
I didn't realize that you are not talking about .m2 but a custom local Maven repo.
Having separate queries would work (even in a completely separate plugin) but how do you decide - based on the file path - that you are in such a repository? Will you just check if the associated source file is there where you expect it to be?
By the way, you only need to implement these 3 interfaces (with the appropriate ServiceProviders annotation):
BinaryForSourceQueryImplementation
SourceForBinaryQueryImplementation2
JavadocForBinaryQueryImplementation
That said, it is probably possible to list those repositories when loading projects (though I'm not sure since Gradle heavily guards its internals nowadays, so you can't always hack around if there is no public API).
New pull request can be found here: https://github.com/kelemen/netbeans-gradle-project/pull/413
When using local maven repositories, gradle doesn't download and cache the binaries, but instead uses them directly from the local repository. This means the netbeans gradle plugin can't resolve the source and javadoc files correctly.
This pull request deals with 2 cases.
Unfortunately, because the binaries are in local maven repositories, the check to see if the binary is a child of the gradle cache directory had to be removed:
This broke 2 tests which tested specifically that. I added @Ignore to both of them. I'm not 100% sure why that check was necessary, but if it is, maybe I can work around it while still maintaining the ability to locate source files for local repositories.