# Gradle task not able to resolve class

**URL:** <https://discuss.gradle.org/t/gradle-task-not-able-to-resolve-class/19374>\
**Category:** Help/Discuss\
**Created:** [September 5, 2016, 7:35pm UTC](https://discuss.gradle.org/t/gradle-task-not-able-to-resolve-class/19374 "2016-09-05T19:35:20Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![ununes](https://avatars.discourse-cdn.com/v4/letter/u/c57346/32.png) [@ununes](https://discuss.gradle.org/u/ununes)\
**Post date:** [September 5, 2016, 7:35pm UTC](https://discuss.gradle.org/t/gradle-task-not-able-to-resolve-class/19374/1 "2016-09-05T19:35:20Z")

</div>

Hi all. I have a gradle (1.8) project with 2 classes A and B where B import A. Both files are under `/foo/bar/` package (myProjectFolder/test/foo/bar folder).

**A.groovy class**

```
package foo.bar

import org.junit.Test;

public class ATest{ 
    @Test
    public void run() {
        System.out.println("CLASS A");
    }
}

```

**B.groovy class**

```
package foo.bar

import org.junit.Test;

public class BTest{
    @Test
    public void run() {
        ATest a = new ATest();
        a.run();
        System.out.println("CLASS B");
    }
}

```

My **build.gradle** file

```
apply plugin: "groovy"
apply plugin: "java"

repositories {
        mavenCentral()
}

dependencies {
        groovy group: "org.codehaus.groovy", name:"groovy-all", version: "1.8.6"
        testCompile "junit:junit:4.10"
}

test {
        testLogging.showStandardStreams = true
}

sourceSets {
        test { groovy {
                srcDir 'test/foo/bar'
        } }
}

buildscript {
        repositories { mavenCentral() }
}

configurations{
    addToClassLoader
}

dependencies {
    addToClassLoader "junit:junit:4.10"
}

URLClassLoader loader = GroovyObject.class.classLoader
configurations.addToClassLoader.each {File file ->

loader.addURL(file.toURL())
}

task runA << {
    new GroovyShell().run(file('test/foo/bar/ATest.groovy'));
}

task runB << {
    new GroovyShell().run(file('test/foo/bar/BTest.groovy'));
}

```

Output console for `gradle clean -Dtest.single=A test`

```
[root@vm1]# gradle clean -Dtest.single=A test
The groovy configuration has been deprecated and is scheduled to be removed in Gradle 2.0. Typically, usages of 'groovy' can simply be replaced with 'compile'. In some cases, it may be necessary to additionally configure the 'groovyClasspath' property of GroovyCompile and Groovydoc tasks.
:clean
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources
:classes
:compileTestJava UP-TO-DATE
:compileTestGroovy
:processTestResources UP-TO-DATE
:testClasses
:test
foo.bar.ATest > run STANDARD_OUT
    CLASS A
BUILD SUCCESSFUL
Total time: 13.205 secs

```

Output console for `gradle clean -Dtest.single=B test`

```
[root@vm1]# gradle clean -Dtest.single=B test
The groovy configuration has been deprecated and is scheduled to be removed in Gradle 2.0. Typically, usages of 'groovy' can simply be replaced with 'compile'. In some cases, it may be necessary to additionally configure the 'groovyClasspath' property of GroovyCompile and Groovydoc tasks.
:clean
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources
:classes
:compileTestJava UP-TO-DATE
:compileTestGroovy
:processTestResources UP-TO-DATE
:testClasses
:test
foo.bar.BTest > run STANDARD_OUT
    CLASS A
    CLASS B
BUILD SUCCESSFUL
Total time: 12.218 secs

```

Output console for `gradle -q runA -i`

```
[root@vm1]# gradle -q runA -i
Starting Build
Settings evaluated using empty settings script.
Projects loaded. Root project using build file '/opt/myProject/build.gradle'.
Included projects: [root project 'myProject']
Evaluating root project 'myProject' using build file '/opt/myProject/build.gradle'.
Starting file lock listener thread.
The groovy configuration has been deprecated and is scheduled to be removed in Gradle 2.0. Typically, usages of 'groovy' can simply be replaced with 'compile'. In some cases, it may be necessary to additionally configure the 'groovyClasspath' property of GroovyCompile and Groovydoc tasks.
All projects evaluated.
Selected primary task 'runA'
Tasks to be executed: [task ':runA']
:runA (Thread[main,5,main]) started.
:runA
Executing task ':runA' (up-to-date check took 0.001 secs) due to:
  Task has not declared any outputs.
CLASS A
JUnit 4 Runner, Tests: 1, Failures: 0, Time: 63
:runA (Thread[main,5,main]) completed. Took 0.739 secs.
BUILD SUCCESSFUL
Total time: 7.826 secs

```

Output console for `gradle -q runB -i` **\<-- THIS EXECUTION FAILS** and I don’t know why.

```
[root@vm1]# gradle -q runB -i
Starting Build
Settings evaluated using empty settings script.
Projects loaded. Root project using build file '/opt/myProject/build.gradle'.
Included projects: [root project 'myProject']
Evaluating root project 'myProject' using build file '/opt/myProject/build.gradle'.
Starting file lock listener thread.
The groovy configuration has been deprecated and is scheduled to be removed in Gradle 2.0. Typically, usages of 'groovy' can simply be replaced with 'compile'. In some cases, it may be necessary to additionally configure the 'groovyClasspath' property of GroovyCompile and Groovydoc tasks.
All projects evaluated.
Selected primary task 'runB'
Tasks to be executed: [task ':runB']
:runB (Thread[main,5,main]) started.
:runB
Executing task ':runB' (up-to-date check took 0.001 secs) due to:
  Task has not declared any outputs.
:runB FAILED
:runB (Thread[main,5,main]) completed. Took 0.237 secs.

FAILURE: Build failed with an exception.
* Where:
Build file '/opt/myProject/build.gradle' line: 46
* What went wrong:
Execution failed for task ':runB'.
> startup failed:
  /opt/myProject/test/foo/bar/BTest.groovy: 8: unable to resolve class ATest
   @ line 8, column 9.
            ATest a = new ATest();
         ^
  /opt/myProject/test/foo/bar/BTest.groovy: 8: unable to resolve class ATest
   @ line 8, column 13.
            ATest a = new ATest();
             ^
  2 errors
* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
BUILD FAILED
Total time: 7.872 secs

```

So, what am I missing to run the task runB correctly?

---

<div class="post-metadata">

**Author:** ![rodrigo](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/rodrigo/32/3431_2.png) [@rodrigo](https://discuss.gradle.org/u/rodrigo)\
**Post date:** [September 5, 2016, 8:21pm UTC](https://discuss.gradle.org/t/gradle-task-not-able-to-resolve-class/19374/2 "2016-09-05T20:21:39Z")

</div>

Hi Ulisses,

I cannot help you understanding why _GroovyShell_ does not find the other class but if what you’re trying to accomplish with _runB_ is to execute just a subset of the tests may I suggest you to define a _Test_ task instead?

```
task runB(type: Test) {
  classpath = sourceSets.test.runtimeClasspath
  testLogging.showStandardStreams = true
  include '**/B*'
}

```

This definition comes with the usual benefits of up-to-date checking, reporting, etc.

Cheers!  
Rodrigo

---

<div class="post-metadata">

**Author:** ![ununes](https://avatars.discourse-cdn.com/v4/letter/u/c57346/32.png) [@ununes](https://discuss.gradle.org/u/ununes)\
**Post date:** [September 5, 2016, 8:54pm UTC](https://discuss.gradle.org/t/gradle-task-not-able-to-resolve-class/19374/3 "2016-09-05T20:54:41Z")

</div>

It solves my problem, but not the _GroovyShell_ issue.  
Still don’t know why _GroovyShell_ can’t find class A.

I will use your suggestion while I can’t fix _GroovyShell_.  
Obrigado jovem.
