Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gradle 'error: package com.google.common.collect does not exist'

I am following a little test script and providing it with the first piece of code to make it green. The code is java and the testing is gradle with java. Java is version "1.8.0_60" on Mac OSX "El Capitan". gradle is version 2.8.

After using gradle build, here is the error shown:

$ gradle build
:compileJava
/Users/rsalazar/exercism/java/etl/src/main/java/Etl.java:1: error: package  com.google.common.collect does not exist
import com.google.common.collect.ImmutableMap;
                            ^
/Users/rsalazar/exercism/java/etl/src/main/java/Etl.java:9: error: cannot find symbol
    return ImmutableMap.of("a", 1);
           ^
  symbol:   variable ImmutableMap
  location: class Etl
2 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.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 2.597 secs

Here is the build.gradle file:

apply plugin: "java"
apply plugin: "eclipse"
apply plugin: "idea"

repositories {
  mavenCentral()
}

dependencies {
  testCompile "junit:junit:4.10"
  testCompile "org.easytesting:fest-assert-core:2.0M10"
  testCompile "com.google.guava:guava:16+"
}

Here is the test: (EtlTest.java)

import com.google.common.collect.ImmutableMap;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import static org.fest.assertions.api.Assertions.assertThat;

public class EtlTest {
  private final Etl etl = new Etl();

  @Test
  public void testTransformOneValue() {
    Map<Integer, List<String>> old = ImmutableMap.of(1, Arrays.asList("A"));
    Map<String, Integer> expected = ImmutableMap.of("a", 1);

    assertThat(etl.transform(old)).isEqualTo(expected);
  }
}

Here is the code under test: (Etl.java)

import com.google.common.collect.ImmutableMap;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class Etl {
  public Map<String, Integer> transform(Map <Integer, List<String>> from) {
    return ImmutableMap.of("a", 1);
  }
}

I am not looking for help on making the test pass. Just help on making the testing compile with gradle. I am sorry to say I am stuck when compiling with the error message provided. I couldn't find any help on the net. Thanks much!

like image 322
rafa2000 Avatar asked Dec 24 '22 13:12

rafa2000


1 Answers

Since you need ImmutableMap to compile source (not only test sources) as well you need to change this line:

testCompile "com.google.guava:guava:16+"

to this:

compile "com.google.guava:guava:16+"

It will make guava available at compile time for source code, hence resolve the problem.

like image 184
Opal Avatar answered Dec 31 '22 11:12

Opal