Grails - 尝试将nojars应用程序部署到glassfish 3.0.1中

时间:2010-11-16 10:17:42

标签: grails groovy glassfish

由于内存限制,我正在尝试构建一个内存占用较少的grails应用程序。我用这个论点“--nojars”来构建战争。我创建了一个没有所有jar的war文件,当我在glassfish中部署时遇到了这个错误

加载应用程序时出现异常: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中部署应用程序之前,我已经指明了库的路径。

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

通常建议使用GlassFish的Common Classloader。这意味着将共享JARS放入 $ domain-dir / lib 文件夹(但到该子文件夹中)。

您可能正在尝试将 Application Classloader asadmin deploy --libraries命令一起使用。这更复杂且容易出错。如果您不需要具有不同Web应用程序的相同JAR的不同版本,那么您一定要选择上面指定的 Common Classloader

另请参阅The Classloader Hierarchy以获取参考。


编辑根据提问者的评论更新:

domain/domain1/lib文件夹肯定有效(我已经测试过了)。要验证这一点,请将log4j.jar放入该文件夹,然后将test.jsp添加到domain1/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。 - 我还建议您发布完整的堆栈跟踪。