2010-11-16 88 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

相关问题