如何将Java JAR文件添加到Grails项目?

16

我有几个Java / Maven项目,想在Grails 2.0.4项目中使用。 我尝试了各种方法,例如:

  1. 将JAR文件安装到本地Maven存储库中,并执行 grails install-dependency com.foo:my-project:0.0.1-SNAPSHOT
  2. 将JAR文件复制到grails的lib文件夹中。
  3. compile com.foo:my-project:0.0.1-SNAPSHOT添加到BuildConfig.groovy的依赖项部分中
  4. 取消注释mavenLocal()并传递/home/me/.m2/repository

我可能还尝试了其他一些事情,例如每当方便时,就会神奇地添加一个grails clean。 在每种情况下,grails compile都会产生以下结果:编译失败,无法解析任何JAR中的类的任何引用。

你知道我缺少什么吗?


1
这真的很奇怪,因为任何一个选项都应该起作用...你没有碰巧使用比你运行Grails更高版本的Java编译JAR中的类吗?我曾经遇到过一个类似的问题,是由于一个PostgreSQL驱动程序jar导致的。 - chrislatimer
3
你能否使用jar tf lib.jar | grep mypackage.MyClass命令验证该JAR文件是否包含缺失的类? - ataylor
2
我以前也遇到过类似的问题...我忘记了导入我正在使用的类。 - cdeszaq
4个回答

17
将JAR文件放入lib文件夹中应该就可以解决问题。我们目前正在使用相同的方法,没有出现任何问题。

2
默认的lib文件夹在Grails 3.0中已经不存在。http://grails.github.io/grails-doc/3.0.x/guide/single.html#upgrading -->“应使用依赖解析来解析JAR文件”。 - Dem Pilafian

14

如果默认情况下Grails不接受存放在<GRAILS-APP-DIR>/lib(似乎使用Grails 3.X后,/lib文件夹的默认配置被删除)的本地.jar库,则可以通过修改build.gradle文件添加本地目录依赖项来强制执行。

对于几乎所有情况,最好使用maven仓库,但是可能存在一些未在公共仓库中的db-vendor-drivers或其他库。针对这些库,在<GRAILS-APP-DIR>/build.gradle中进行修改,例如添加:

dependencies {
    ...
    compile fileTree(dir: './lib', include: ['*.jar'])
    ...
}
如果你想的话可以使用另一个目录(不是/lib),因为你正在指定它。当然要使用正确的范围(例如对于db-vendor-drivers,它可能已经在应用程序容器类路径中,gradle中的作用域将是runtime而不是compile)。 更新 从gradle 7.0开始,使用compileruntime被删除。相反,您可以使用compileOnlyruntimeOnlyimplementation,具体取决于您是否要将依赖项仅放在编译类路径、运行时类路径或两者都放置, 在gradle 7.0及以上版本中,您可以使用:
dependencies {
    ...
    implementation fileTree(dir: './lib', include: ['*.jar'])
    ...
}

我不确定为什么你会对古老的问题给出如此仔细的答案。我希望这能帮助到某些人,但我不会试图评估它。我已经三年没有做过任何Grails相关的工作了。 - Eric Wilson
7
@EricWilson 我第一次尝试使用Grails,发现这个问题只有关于该怎么做的答案,没有关于它是如何工作的解释。因此,我试图简单地说明它的工作原理。不用担心,我并不希望你检查这个答案 :),我只是发布它以帮助其他人。 - albciff

9
将jar包添加到“lib”文件夹对我来说不够,我还需要运行以下命令:
grails compile --refresh-dependencies

在它的作用后。

0

Grails 的 refresh-dependency、clean 等命令对我无效。对我有效的是退出 Grails 守护进程,然后重新启动 Grails。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接