我有一个我正在尝试构建的Java项目,我最近移动到gradle以便能够更快,更轻松地管理依赖项。
我正在尝试使用gradle build
,结果如下:
C:\whatever\>gradle build
:compileJava
:processResources UP-TO-DATE
:classes
:jar
:startScripts
:distTar
:distZip
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build
BUILD SUCCESSFUL
Total time: 1.75 secs
给我带来问题的图书馆是我在本地添加的图书馆:
repositories {
flatDir {
dirs 'libraries'
}
}
dependencies {
compile name: 'jfxwrapper'
}
这不是我添加到项目中的唯一库,但它是我自己构建的唯一库。
当我执行gradle build
(或gradlew build
时,它似乎完全相同),它在build/libs/*.jar
中给了我一个.jar,然后我尝试执行此.jar它抛出了这个异常:
引起:java.lang.ClassNotFoundException:jfxwrapper.JFXWrapperScene
JFXWrapperScene是jfxwrapper.jar
内的一个类。我在将它添加到eclipse项目路径之前使用过这个库并且它工作正常,但由于某种原因,gradle似乎无法找到它。
任何解释?知道为什么会发生这种情况以及如何解决这个问题吗?
感谢您的耐心等待。
更新:我发现问题是我没有将库添加到.jar中,这段代码将所有引用的库添加到.jar中:
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'MyTitle',
'Implementation-Version': '1.1.1',
'Main-Class': 'Main'
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
这会使用gradle fatJar
添加所有依赖项,但项目仍然无效,现在说:
应用程序启动方法中的异常
我知道我在start方法中没有异常,因为如果我使用Eclipse导出它,我可以运行相同的代码。
有什么建议吗?我开始相信切换到gradle是一个很大的错误,我可能需要继续使用Eclipse导出,它不是那么酷或快,但它确实有效。
答案 0 :(得分:0)
我刚刚找到解决方案:
编译基于JavaFX的程序时,需要指定资源的位置(* .css,* .fxml,images ....),在我的例子中,这段代码有效:
sourceSets.main.resources.srcDir 'pathToDirectory'
//For exmaple, in my case: 'src/main/java'