Java代码不会看到使用Gradle fileTree包含的JAR文件库

时间:2014-02-20 20:50:18

标签: java jar intellij-idea dependencies gradle

我使用其Gradle项目模板在IntelliJ IDEA中创建了一个新的Java项目,我正在尝试设置一个库,以便我的项目可以使用它。我将库JAR文件保存到项目中的./libs/frink-2014-02-17.jar。在dependencies的{​​{1}}部分,我写了build.gradle。但我的Java代码无法看到该库。当我尝试构建项目时,编译器抱怨runtime fileTree(dir: 'libs', include: '*.jar')引用了一个不存在的包。

如何修复构建错误,以便在Java项目中使用Frink库?

详细

图书馆是Frink。 Frink是not in the Maven repository,因此我downloaded its JAR file重命名它,因此它在文件名中有版本(在the recommendation of the Gradle docs之后),并将其放在import frink.parser.Frink;文件夹的根目录下该项目。然后我从Gradle User Guide: File dependencies复制了以下代码行,试图在我创建的libs目录中包含所有JAR文件:

libs

但是当我“制作项目”或运行runtime fileTree(dir: 'libs', include: '*.jar') 时,我会收到以下错误:

./gradlew build

在编译之前,我的IDE会在打开并查看/…/frink-soulver/src/main/java/Main.java:1: package frink.parser does not exist import frink.parser.Frink; ^ /…/frink-soulver/src/main/java/Main.java:5: cannot find symbol symbol : class Frink location: class Main Frink interp = new Frink(); ^ /…/frink-soulver/src/main/java/Main.java:5: cannot find symbol symbol : class Frink location: class Main Frink interp = new Frink(); ^ /…/frink-soulver/src/main/java/Main.java:11: package frink.errors does not exist } catch (frink.errors.FrinkEvaluationException fee) { ^ 4 errors :compileJava FAILED 时突出显示相同的错误。

Main.java中的代码(包括Main.java)仅为the Frink sample code。并且Frink online JavaDocs表示该JAR文件中确实应该有一个import包。所以我并不是要求一个不存在的包。

我尝试在frink.parser中将runtime更改为compile,但这没有任何区别。

当我在IDEA中打开“Project Structure ...”并转到Libraries部分时,该列表中缺少Frink JAR文件。该列表包含“Gradle:guava-12.0”,“Gradle:hamcrest-core-1.3”,“Gradle:jsr305-2.0.3”和“Gradle:junit-4.11”。我不想只使用+按钮来使用IDEA添加库,因为我认为将库包含在两个不同的方式会让人感到困惑。

searched for “Gradle fileTree”,但看起来我使用build.gradle的方式与那些结果相同。

我是Gradle,IDEA的新手,从头开始设置Java项目。因此,如果我的任何项目设置看起来很奇怪或非标准,我愿意接受更正。例如,如果有一个更好的方法来包含Frink而不是将其JAR文件复制到我项目中的文件夹中,我可以这样做。

详细的项目内容

我的完整fileTree

build.gradle

我的项目文件树,由apply plugin: 'java' sourceCompatibility = 1.6 version = '1.0' repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.11' /* commenting this out for the question because the error still happens without this // http://code.google.com/p/guava-libraries/wiki/UseGuavaInYourBuild runtime group: 'com.google.guava', name: 'guava', version: '12.0' // http://stackoverflow.com/questions/10007994/why-do-i-need-jsr305-to-use-guava-in-scala/10013226#10013226 // I'll include this dependency in case I decide I want to use these annotations compile group: 'com.google.code.findbugs', name: 'jsr305', version: '2.0.3' */ runtime fileTree(dir: 'libs', include: '*.jar') } 生成:

tree

我的完整. ├── build │   ├── classes │   │   └── main │   └── dependency-cache ├── build.gradle ├── frink-soulver.iml ├── gradle │   └── wrapper │   ├── gradle-wrapper.jar │   └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── libs │   └── frink-2014-02-17.jar ├── out │   ├── production │   │   └── frink-soulver │   └── test │   └── frink-soulver └── src ├── main │   ├── java │   │   └── Main.java │   └── resources └── test ├── java └── resources

Main.java

2 个答案:

答案 0 :(得分:2)

您已将其指定为runtime的依赖项,但在compile ...

时需要它

答案 1 :(得分:0)

尝试将您的依赖关系规则从runtime fileTree(dir: 'libs', include: '*.jar')更改为compile files('libs/MyLibrary.jar')。这对我有用。

我在Android错误跟踪器上创建了issue,请随时发表评论。