nail fei
nail fei

Reputation: 2319

How to pass args to JVM which runs tests with Gradle?

I am a Gradle rookie and I am not sure whether Gradle will start the new JVM when it runs the test set.

Like Passing JVM arguments to Gradle test task I want to pass some parameters to the JVM running the test set.

I added the following lines to build.gradle:

test {
    groovy {
        jvmArgs '-agentpath:/usr/lib/code_dependency_capturer.so' // add line
        srcDirs = ['src/test']
        if (!JavaVersion.current().isJava8Compatible()) {
            exclude '**/v8/*'
            exclude '**/vm8/*'
        }
    }
    resources {
        srcDirs = ['src/test-resources']
    }
}

But it tells me:

A problem occurred evaluating root project 'groovy'.
Could not find method jvmArgs() for arguments[-agentpath:/usr/lib/code_dependency_capturer.so] on source set 'test' of type org.gradle.api.internal.tasks.DefaultSourceSet. 

I googled this error but failed to solve it.

Upvotes: 30

Views: 45609

Answers (2)

Mahozad
Mahozad

Reputation: 24532

This is for Kotlin DSL (build.gradle.kts):

tasks.withType<Test> {
    jvmArgs(
        "--add-opens=java.base/java.nio=ALL-UNNAMED",
        // ...
    )
    // ...
}

Upvotes: 0

Drew MacInnis
Drew MacInnis

Reputation: 8577

Try setting the jvmArgs of the enclosing test task rather than trying to set them on groovy.

The error you are getting suggests that jvmArgs isn’t present on groovy.

Example:

...
test {
    jvmArgs '-agentpath:/usr/lib/code_dependency_capturer.so' // add line
    groovy {      
        srcDirs = ['src/test']
        ...
    }
    ...
}

This is just a guess as I don’t have a gradle setup handy on which to confirm but worth a try as jvmArgs is documented as a property for test:

https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html#org.gradle.api.tasks.testing.Test:jvmArgs

List<String> jvmArgs

The extra arguments to use to launch the JVM for the process. Does not include system properties and the minimum/maximum heap size.

Since jvmArgs is a list of String you can pass it multiple arguments, refer to:

http://docs.groovy-lang.org/next/html/documentation/working-with-collections.html#_list_literals

Example:

  jvmArgs ["-Xarg1", "-Xarg2"]

For "-Dprop=value" system properties use the systemProperties of the test task instead:

https://docs.gradle.org/current/dsl/org.gradle.api.tasks.testing.Test.html#org.gradle.api.tasks.testing.Test:systemProperties

Upvotes: 31

Related Questions