2015-02-11 102 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