gradle compileJava error: package org.junit does n

2020-03-08 09:18发布

问题:

I'm trying to implement a simple junit test using gradle and running into the following issue when I run gradle test:

:compileJava
/Users/wogsland/Projects/gradling/src/test/CalculatorTest.java:1: error: package org.junit does not exist
import static org.junit.Assert.assertEquals;
                       ^
/Users/wogsland/Projects/gradling/src/test/CalculatorTest.java:1: error: static import only from classes and interfaces
import static org.junit.Assert.assertEquals;
^
/Users/wogsland/Projects/gradling/src/test/CalculatorTest.java:2: error: package org.junit does not exist
import org.junit.Test;
                ^
/Users/wogsland/Projects/gradling/src/test/CalculatorTest.java:5: error: cannot find symbol
  @Test
   ^
  symbol:   class Test
  location: class CalculatorTest
/Users/wogsland/Projects/gradling/src/test/CalculatorTest.java:9: error: cannot find symbol
    assertEquals(6, sum);
    ^
  symbol:   method assertEquals(int,int)
  location: class CalculatorTest
5 errors
:compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
Compilation failed; see the compiler error output for details.

So I've got this build.gradle file:

apply plugin: 'java'

dependencies {
    testCompile 'junit:junit:4.12'
}

sourceSets {
  main {
    java {
      srcDir 'src'
    }
  }
}

And CalculatorTest.java:

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class CalculatorTest {
  @Test
  public void evaluatesExpression() {
    Calculator calculator = new Calculator();
    int sum = calculator.evaluate("1+2+3");
    assertEquals(6, sum);
  }
}

But I can't figure out why it's not finding junit when I've got it included in the dependencies.

回答1:

So apparently I needed to add a compile dependency and then also declare repositories. My new build.gradle that successfully runs the test:

apply plugin: 'java'

repositories { jcenter() }
dependencies {
    testCompile 'junit:junit:4.12'
    compile 'junit:junit:4.12'
}

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
}


回答2:

I have same issue in my latest android version and I have resolved it using below code. I hope you get help.

dependencies {
    testImplementation 'junit:junit:4.12'
    implementation 'junit:junit:4.12'
}


回答3:

Try adding

 repositories {
    maven { url 'http://repo1.maven.org/maven2' }

directly under your buildscript{ in build.gradle



回答4:

I know this is old, but I've run into this recently. You should be able to change the srcdirs for testing with gradle and also have unit tests work. If you want a src/* structure then just put all your tests in test/*.

The issue you're likely experiencing is that if you include your tests in your main/java code folder it will try to compile them during that phase. Move them outside of the src folder and update the srcdir structure accordingly and it should work as expected.

apply plugin: 'java'

repositories { jcenter() }
dependencies {
    testCompile 'junit:junit:4.12'
}

sourceSets {
    main {
        java {
            srcDir 'src'
        }
    }
    test {
        java {
            srcDir 'test'
        }
    }
}