2015-02-11 51 views
0

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

buildConfig.groovy

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

- 当我检查labServices罐子它含有的类

- 当我检查它包含labServices.jar

将.war - 当我检查战争部署的tomcat WEB_INF/lib包含jar

代码失败

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

错误

org.petermac.util.Clarity。堆栈跟踪如下: 抛出java.lang.ClassNotFoundException:org.petermac.util.Clarity

我已经运行清理,冲洗常春藤缓存,手动删除一切,仍然没有工作。它也在本地运行,并通过单元测试(所以这是战争)

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

我对Grails(来自Microsoft)相对来说比较新,所以任何技巧,想法或调试技术都会很棒。

我敢肯定,当部署

UPDATE 实际代码无关去除

import org.petermac.util.Clarity 
public class LoadClarityController extends BaseController { 
    def load() 
    { 
     String samples = params.get("sampleIds") 
     def clarityCredentials = new Clarity("prod", "apiuser", "[email protected]") 
    } 
} 

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

的路径,甚至出现在META-INF(战争)是类路径的设置。另外我还有另外一个外部的jar包,它工作正常吗?我很茫然。

回答

0

终于发现问题了!

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

Servlet。类住在javax库被包含在内的javaee包含在有问题的jar文件中的库所以加载LabServices .jar实际上失败了。

有没有简单的方法来找到这个。

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

0

由于它在WAR中并不是依赖性问题,所以它只会在IDE和/或WAR中未包含IDE和/或run-app时被忽略。 WEB-INF/lib中的所有罐子都包含在类路径中,所以它可能是结构化的。包是否与文件夹匹配?如果是这样,它通常会在测试和run-app中工作,但在部署到容器时不会。

确保源包括

package org.petermac.util 

Clarity.class是在org/petermac/util/在罐子。

+0

是的,Clarity.class在org/....但LoadClarityController.class(来自战争)的来源没有引用util.Clarity(没有任何进口是....应该它? – GarethReid 2015-02-11 05:43:25

+0

如果控制器与其使用的类不在同一个包中,则需要导入,就像在任何Java或Groovy类中一样。但是它抱怨说它找不到'org.petermac.util.Clarity' ,所以你必须导入它,对吗?什么是控制器类? – 2015-02-11 06:56:18

+0

我已经在更新后的帖子底部添加了代码的最基本的东西,让我知道这是否有帮助 – GarethReid 2015-02-11 22:26:31

相关问题