【问题标题】:Grails - trying to deploy a nojars application into glassfish 3.0.1Grails - 尝试将 nojars 应用程序部署到 glassfish 3.0.1
【发布时间】:2011-05-10 17:37:19
【问题描述】:

由于内存限制,我正在尝试构建一个内存占用较小的 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 中部署应用程序之前,我已经指明了库的路径。

我是不是错过了什么?

【问题讨论】:

    标签: grails groovy glassfish


    【解决方案1】:

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

    您可能正在尝试将 Application Classloaderasadmin deploy --libraries 命令一起使用。这更复杂且容易出错。如果您不需要相同 JAR 的不同版本和不同的 Web 应用程序,那么您绝对应该使用上面指定的 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。 - 我还想建议您发布完整的堆栈跟踪。

    【讨论】:

    • 我尝试将所有 jar 放入 domain/domain1/lib 或 domain/domain1/lib/applibs 或 domain/domain1/lib/ext 并将所有类文件放入 domain/domain1/lib/classes将所有文件夹也放入此处,但它仍然给我同样的错误
    • 请注意,我的答案已被扩展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多