-
Notifications
You must be signed in to change notification settings - Fork 20
Gradle
On Linux, Gradle does not install a separate Groovy engine. The Ubuntu PPA packages are quite outdated, so the simplest solution is to use sdkman.
Problem: You're trying to build a Groovy script using Gradle, and the script uses Grapes/Grab to resolve its dependencies. However, gradle build
throws an exception (displayed here with gradle build --stacktrace
).
* What went wrong:
Execution failed for task ':compileGroovy'.
> org/apache/ivy/core/report/ResolveReport
[...]
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':compileGroovy'.
[...]
Caused by: java.lang.NoClassDefFoundError: org/apache/ivy/core/report/ResolveReport
at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:167)
at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:54)
at org.gradle.api.internal.tasks.compile.daemon.CompilerDaemonServer.execute(CompilerDaemonServer.java:55)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:364)
... 2 more
Caused by: java.lang.ClassNotFoundException: org.apache.ivy.core.report.ResolveReport
... 8 more
Solution: Add the ivy
configuration (see the example).
apply plugin: 'groovy'
repositories {
mavenCentral()
}
configurations {
ivy
}
dependencies {
compile group: 'org.codehaus.groovy', name: 'groovy', version: '2.4.6'
ivy group: 'org.apache.ivy', name: 'ivy', version: '2.4.0'
}
tasks.withType(GroovyCompile) {
groovyClasspath += configurations.ivy
}
"That said, a better approach is to manage dependencies with Gradle." (Source: http://stackoverflow.com/questions/18173908/error-compiling-a-groovy-project-using-grab-annotation)
So you're generally much better off using Gradle to resolve the dependencies as well:
apply plugin: 'groovy'
dependencies {
compile localGroovy()
}
sourceSets {
main {
groovy {
srcDir '.'
}
}
}
task runScript(dependsOn: 'classes', type: JavaExec) {
main = 'benchmark'
classpath = sourceSets.main.runtimeClasspath
}
The localGroovy()
dependency places the local Groovy sources to the classpath. The srcDir
part sets the source directory to the current directory. To run the script, use the runScript
goal:
$ gradle runScript
Problem:
Exception in thread "main" org.openrdf.rio.UnsupportedRDFormatException: No parser factory available for RDF format Turtle (mimeTypes=text/turtle, application/x-turtle; ext=ttl)
Solution:
As described in the documentation of the Shadow plug-in, simply add:
shadowJar {
mergeServiceFiles()
}
Re-run Gradle with gradle clean shadowJar
.
The related Maven question is discussed on Stack Overflow
Problem: the build throws the following error.
* What went wrong:
A problem occurred evaluating project '...'
> Could not create an instance of type org.gradle.api.internal.artifacts.dependencies.DefaultExternalModuleDependency_Decorated.
Solution: this obscure error message is usually caused by writing compile group:
instead of compile
So change this:
compile group: "group:artifact:version"
To this:
compile "group:artifact:version"
apply plugin: "java"
jar {
from sourceSets.main.allJava
}
apply plugin: "scala"
jar {
from sourceSets.main.allScala
}
-
Problem: during import, you may encounter the following error:
Synchronize Gradle builds with workspace failed due to an unexpected error. Unsupported method: HierarchicalEclipseProject.getIdentifier().
-
Solution #1: click Previous and set the Gradle wrapper's version manually to 3.0 (in our experience, 3.1 and 3.2 do not work).
-
Solution #2: update Buildship.
It seems that there are some compatibility issues in multiple-project builds:
apply plugin: 'idea'
apply plugin: 'scala'
This results in:
* What went wrong:
A problem occurred evaluating project ':...'
> Failed to apply plugin [class 'org.gradle.api.plugins.scala.ScalaBasePlugin']
> A dependency must not be empty
Solution: remove the idea
plugin.