Closed SilverTiger closed 4 years ago
I can reproduce the issue but need to further investigate.
Unfortunately, I haven't understood why the error is arising now which leads to the assumption that Gradle has changed something internally while providing a new Worker API (see https://docs.gradle.org/5.6/release-notes.html#improvements-for-plugin-authors). Especially the following makes me think:
First, the classpath is now cleaner when submitting work using classloader or process isolation. Extra jars (such as external jars used by Gradle itself) should no longer appear on the worker classpath.
Currently I don't know a better way adding pmd to the classpath as using:
config.setClasspath(getPmdClasspath());
One last hope is that I can make it work again by switching to the new worker API, though.
Edit: As expected, simply switching to new API will not work :-( Therefore I need to dive deeper into Gradle classloading for Workers ...
Edit2: As Gradle internally does not use the Worker API for e.g. Pmd, Checkstyle etc. I have no blueprint to look at. And as Gradle 5.6 is very fresh, I haven't found somebody else using it already with a plugin for now - only found one other, similar issue: https://github.com/Triple-T/gradle-play-publisher/issues/664
Comparing Gradle 5.5.1 and 5.6 while debugging into CpdExecutor
and analysing Thread.currentThread().contextClassLoader
, it is very obvious that
VisitableURLClassLoader(worker-loader)
with ucp.path
(= URLClassPath
) of all my added pmd
classpath settings, whereas VisitableURLClassLoader(ClassLoaderScopeIdentifier.Id{root:injected-plugin(local)})
with ucp.path
of only my local build files (java/main
, groovy/main
, resources/main
).I also tried all different IsolationMode
settings but the same as described above for 5.6.
Hi there, we're also experiencing this issue. Is there any update on fixing this bug? I tried updating to 5.6.2, but this didn't work.
I'm working on it as much as I can which is honestly at the moment not very much @Aldentev. Sorry for not having better news for you. It is quite complex to understand and I fear to have to debug into Gradle Core and diff changes to understand how the logic has been changed...
@aaschmid That's ok! It is not burning for us. Good luck with fixing it :-)
Did anyone test if changing submit
to noIsolation
here:
https://github.com/aaschmid/gradle-cpd-plugin/blob/07f9e3c48a82293795f374d36f1f7dd2af072cce/src/main/java/de/aaschmid/gradle/plugins/cpd/Cpd.java#L108-L112
fixes the problem?
I haven't tried it myself but I stumbled upon a note about it while reading the update notes for Gradle 5.5 -> 5.6 See also: https://docs.gradle.org/current/userguide/custom_tasks.html#isolation-modes
I tried various different solutions including the @gebart suggested one but haven't had luck yet. However had not a lot time since the issues was raised. Looking forward to be able to debug Gradles internals within the next couple of days in order to come up with a solution on this.
@SilverTiger @gebart @Aldentev: Finally I got a working version. Still seems that the old and deprecated approach using submit
does not work anymore. Fortunately, I got the new worker API working, such that you can find a first "SNAPSHOT" version [here]().
You can try it using:
buildscript {
repositories {
maven {
url "https://oss.sonatype.org/content/repositories/snapshots/"
}
}
dependencies {
classpath group: 'de.aaschmid', name: 'gradle-cpd-plugin', version: '3.0-SNAPSHOT'
}
}
// ...
apply plugin: 'cpd'
Feedback is very welcome, while I had to fix the failing unit tests due to required internal refactoring...
Edit: Last time it was not working because of IntelliJ problems which causes not to build the whole project properly on a change and I haven't had used getters (methods starting with get
) while create a worker config inheriting from https://docs.gradle.org/current/javadoc/org/gradle/workers/WorkParameters.html.
The CPD-Plugin fails since upgrading to Gradle 5.6. Going back to Gradle 5.5.1 it works though.
Build output: