Grails在jar中找不到类

时间:2015-02-11 03:19:23

标签: grails jar dependencies classnotfoundexception

我在Grails项目中包含了一个jar,并且找到了一个未找到类的问题。

buildConfig.groovy

dependencies {
    compile "labServices:labServices:1.0"
}
repositories {
    flatDir name:'labServices',  dirs:'../LabServices/build/libs/'
}

- 当我检查labServices jar时,它包含类

- 当我检查.war时,它包含labServices.jar

- 当我检查战争的tomcat部署时,WEB_INF / lib包含jar

失败的代码

//this is a class in the labServices.jar
def clarityCredentials = new Clarity("prod", "xxxx", "xxxx")

错误

  

org.petermac.util.Clarity。 Stacktrace如下:   java.lang.ClassNotFoundException:org.petermac.util.Clarity

我已经运行了清理,刷新了常春藤缓存,手动删除了所有内容但仍无法正常工作。它也在本地运行并通过单元测试(所以这是战争)

注意:依赖项报告显示labServices没有依赖项,即使有一些依赖项。这可能是一个问题吗?

我对Grails(来自微软)比较陌生,所以任何技巧,想法或调试技巧都会很棒。

我很确定部署时是类路径设置

更新 删除了不相关的实际代码

import org.petermac.util.Clarity
public class LoadClarityController extends BaseController {
    def load() 
    {
        String samples = params.get("sampleIds")
        def clarityCredentials = new Clarity("prod", "apiuser", "1qaz@WSX")
    }
}

//in LabServices (jar is being included in war)
package org.petermac.util
public class Clarity
{
    public Clarity( server, username, password )
    {
    }
}

路径甚至出现在META-INF(战争中)。另外我还有另外一个外部jar可以正常工作吗?我很茫然。

2 个答案:

答案 0 :(得分:0)

因为它在WAR中不是依赖性问题,所以只有在IDE中忽略它和/或run-app和/或不包含在WAR中时才会出现这种情况。 WEB-INF/lib中的所有jar都包含在类路径中,因此它可能是结构化的。包是否与文件夹匹配?如果是这样,它通常会在测试和run-app中工作,但在部署到容器时则不行。

确保源包含

package org.petermac.util

并且Clarity.class位于jar中的org/petermac/util/

答案 1 :(得分:0)

终于找到了问题!

Servlet.class是根本原因,因为它不能包含在grails项目中(tomcat提供了这个)。

Servlet.class 位于 javax 库中,该库包含在 javaee 库中,该库包含在有问题的jar中,因此加载 LabServices .jar实际上失败了。

没有简单的方法可以找到它。

从LabServices模块中删除或排除javaee解决了这个问题。