JVM Utilities

Grolifant offers a number of items to work with JVM-based processes as well. Some of these attempt to hide change in the Gradle API as much as possible.

An instance of it can be obtained via ConfigCacheSafeOptions.jvmTools() or ProjectOperations.getJvmTools(). This instance is configuration cache compatible and can be called from within a task action.

Java Fork Options

There are a number of places in the Gradle API which utilises JvmForkOptions, but there is no easy way for a plugin provider to create a set of Java options for later usage. For this purpose we have created a version that looks the same and implements most of the methods on the interface.

Here is an example of using it with a Gradle worker configuration.

ProjectOperations po = ProjectOperations.find(project)
JvmForkOptions jfo = po.jvmTools.javaForkOptions

jfo.systemProperties 'a.b.c' : 1

workerExecutor.submit(RunnableWorkImpl.class) { WorkerConfiguration conf ->

    forkOptions { org.gradle.process.JavaForkOptions options ->
        jfo.copyTo(options)
    }
}

Searching the classpath

Sometimes one wants to know in which file a class is located. This might be important as it might be necessary to put a JAR on a classpath of an external JVM process. For this purpose there is resolveClassLocation and it comes in a number of variations.

Variation Description

resolveClassLocation(Class aClass)

Simply looks for a class and returns the location which could be a file, a directory or a module.

resolveClassLocation(Class aClass,FileCollection substitutionSearch,Pattern substitutionMatch)

Searches for a class, then if it is found and it a JAR, look to see if it is also in the substitution path. If so, use the location from the substitution search. The pattern is typically the name of a JAR i.e. ~/ivypot-1.2.3.jar/ Anything that is a Gradle generated JAR, will be not be considered a validate candidate as a substitution.

resolveClassLocation( Class aClass, FileCollection substitutionSearch, Pattern substitutionMatch, Pattern redoIfMatch )

As the previous, but offers more control over what needs to be substituted.

resolveClassLocation( Class aClass, FileCollection substitutionSearch, Pattern substitutionMatch, Pattern redoIfMatch, Pattern ignoreFromPaths )

As before, but allows specification of what can be ignored.