2010-11-16 153 views
0

由於內存限制,我正嘗試構建一個具有較小內存佔用空間的Grails應用程序。我用這個論點「--nojars」來構建戰爭。我創建了一個沒有所有jar的war文件,當我在glassfish中部署時我遇到這個錯誤Grails - 嘗試將nojars應用程序部署到glassfish 3.0.1

加載應用程序時出現異常:java.lang.Exception:java.lang.IllegalStateException:ContainerBase.addChild:start:org。 apache.catalina.LifecycleException:java.lang.IllegalArgumentException異常:拋出java.lang.ClassNotFoundException:org.codehaus.groovy.grails.web.util.Log4jConfigListener

這似乎是應用程序無法找到哪裏是jar文件。

我已經在glassfish中部署應用程序之前指出了庫的路徑。

我錯過了somethinng?

回答

0

通常推薦使用GlassFish的Common Classloader。這意味着將共享JARS放入到$ domain-dir/lib文件夾(但是而不是)放入該文件夾的子文件夾中。

您可能試圖將應用程序類加載程序asadmin deploy --libraries命令一起使用。這更復雜且容易出錯。如果您不需要具有不同Web應用程序的相同JAR的不同版本,則應該按照上面的指定去使用通用加載器

另請參閱The Classloader Hierarchy以供參考。


編輯更新按提問者的評論:

domain/domain1/lib文件夾肯定工程(我已經測試過)。爲了驗證,把log4j.jar到該文件夾​​並添加一個test.jspdomain1/applications/$applicationName,只包含:

<% out.println(
    org.apache.log4j.Logger.getLogger(this.getClass())); %> 

如果這樣的作品,但你的其他代碼沒有,有可能是另一點考慮:你在你的代碼中使用Log4J的Logger.getLogger(..)或Apache Commons'LogFactory.getInstance(..)

有關相關問題,請參閱文章Taxonomy of class loader problems encountered when using Jakarta Commons Logging。 - 我還想建議你發佈完整的堆棧跟蹤。

+0

我試着將所有jar放入domain/domain1/lib或domain/domain1/lib/applibs或domain/domain1/lib/ext,並將所有類文件放入domain/domain1/lib /在這裏,但它仍然給我同樣的錯誤 – kai 2010-11-18 06:24:12

+0

請注意,我的答案已被擴展。 – robbbert 2010-11-18 13:19:44

相關問題