我使用其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
答案 0 :(得分:2)
您已将其指定为runtime
的依赖项,但在compile
...
答案 1 :(得分:0)
尝试将您的依赖关系规则从runtime fileTree(dir: 'libs', include: '*.jar')
更改为compile files('libs/MyLibrary.jar')
。这对我有用。
我在Android错误跟踪器上创建了issue,请随时发表评论。