我使用IntelliJ的Gradle项目模板在Java中创建了一个新的Java项目,我正在尝试建立一个库,以便我的项目可以使用它。我将库JAR文件保存到项目中的./libs/frink-2014-02-17.jar中。在我的build.gradle的build.gradle部分,我写了runtime fileTree(dir: 'libs', include: '*.jar')。但是我的Java代码看不到那个库。当我试图构建该项目时,编译器会抱怨import frink.parser.Frink;引用了一个不存在的包。
如何修复构建错误,以便在Java项目中使用Frink库?
详细信息
图书馆是弗林克。Frink是不在Maven存储库中,所以我将它重命名为下载其JAR文件,使其在文件名中具有版本(遵循级文档的推荐),并将其放在项目根目录下的libs文件夹中。然后,我从分级用户指南:文件依赖关系复制了以下代码行,试图将所有JAR文件包含在我创建的libs目录中:
runtime fileTree(dir: 'libs', include: '*.jar')但是,当我“生成项目”或运行./gradlew build时,我会得到以下错误:
/…/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之前,当我打开和查看它时,IDE会突出显示相同的错误。
我在Main.java中的代码,包括import,就是Frink示例代码。Frink在线JavaDocs表明JAR文件中确实应该有一个frink.parser包。这并不是说我要的是一个不存在的包裹。
我尝试过将runtime改为compile in build.gradle,但这并没有什么区别。
当我打开“项目结构…”时在IDEA并转到Libraries部分时,Frink JAR文件在列表中丢失了。该列表包含“Gradle:番石榴-12.0”、“Gradle:hamcrest-core-1.3”、“Gradle:jsr305 305-2.0.3”和“Gradle:junit-4.11”。我不想只点击+按钮来添加一个使用IDEA的库,因为我认为以两种不同的方式包含库会让人感到困惑。
我已经使用了搜索“Gradle fileTree”,但看起来我使用fileTree的方式与在这些结果中使用的方式相同。
我对从无到有地分级、构思和设置Java项目都很陌生。因此,如果我的任何项目设置看起来很奇怪或不标准,我是开放的更正。例如,如果有比将JAR文件复制到项目中的文件夹中更好的方法来包含Frink,我可以这样做。
详细项目内容
我的完整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
import frink.parser.Frink;
public class Main {
public static void main(String[] args) {
Frink interp = new Frink();
interp.setRestrictiveSecurity(true);
try {
String results = interp.parseString("2+2");
System.out.println(results);
} catch (frink.errors.FrinkEvaluationException fee) {
// Do whatever you want with the exception
}
}
}发布于 2014-02-20 20:57:03
您已经将它指定为runtime的依赖项,但当您compile.
发布于 2016-04-11 20:07:18
尝试将依赖规则从runtime fileTree(dir: 'libs', include: '*.jar')更改为compile files('libs/MyLibrary.jar')。这对我有用。
我已经在Android bug跟踪器上创建了问题,请随时评论它。
https://stackoverflow.com/questions/21919276
复制相似问题