【问题标题】:Grails 1.3.9 and grails-melody: javamelody.jar not packaged when building war with OpenJDK 1.6Grails 1.3.9 和 grails-melody:与 OpenJDK 1.6 构建战争时未打包 javamelody.jar
【发布时间】:2014-07-18 13:22:13
【问题描述】:

我们正在维护一个在 Grails 1.3.9 中开发的 webapp。

为了监控性能,该应用安装了 grails-melody 1.21 插件。

似乎该插件在 grails 1.3.x 的存储库中不再可用。我按照documentation 中的建议从google-code 下载了它。

stackoverflow 中的Another post 建议可以将压缩插件放入 lib 中,然后从 BuildConfig.groovy 中引用。

plugins {
    runtime ":hibernate:1.3.9"
    build ":tomcat:1.3.9"
    compile ":dojo:1.6.1.17"

    // Downloaded from
    // https://code.google.com/p/javamelody/downloads/list?can=1&q=grails
    // Installed from lib
    // https://stackoverflow.com/questions/15751285/whats-the-correct-way-to-install-a-grails-plugin-from-a-zip-file

    compile ":grails-melody:1.21"
}

我这样做了,并且在使用 Oracle JDK 7(在 Ubuntu 14.04 上)构建 war 文件时,此过程运行良好。我不得不将 grails-grails-melody-1.21.zip 重命名为 grails-melody-1.21.zip 才能找到它。

$ java -version
java version "1.7.0_65"
Java(TM) SE Runtime Environment (build 1.7.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

在构建过程中,melody 的依赖项在构建过程开始时加载,此时 grails 文件也是副本:

...
Downloading: /home/matejk/devel/grails/grails-1.3.9/lib/servlet-api-2.5.jar ...
Download complete.
Downloading: /home/matejk/devel/grails/grails-1.3.9/lib/jsp-api-2.1.jar ...
Download complete.
Downloading: http://repo1.maven.org/maven2/net/bull/javamelody/javamelody-core/1.44.0/javamelody-core-1.44.0.pom ...
Download complete.
Downloading: http://repo1.maven.org/maven2/net/bull/javamelody/javamelody-core/1.44.0/javamelody-core-1.44.0.pom.sha1 ...
Download complete.
Downloading: http://repo1.maven.org/maven2/org/jrobin/jrobin/1.5.9/jrobin-1.5.9.pom ...
Download complete.
Downloading: http://repo1.maven.org/maven2/org/jrobin/jrobin/1.5.9/jrobin-1.5.9.pom.sha1 ...
Download complete.
Downloading: http://repo1.maven.org/maven2/com/lowagie/itext/2.1.7/itext-2.1.7.pom ...
Download complete.
Downloading: http://repo1.maven.org/maven2/com/lowagie/itext/2.1.7/itext-2.1.7.pom.sha1 ...
Download complete.
Downloading: /home/matejk/devel/grails/grails-1.3.9/lib/groovy-all-1.7.8.jar ...
Download complete.
Downloading: /home/matejk/devel/grails/grails-1.3.9/lib/commons-beanutils-1.8.0.jar ...
Download complete.
...
Downloading: http://repo1.maven.org/maven2/net/bull/javamelody/javamelody-core/1.44.0/javamelody-core-1.44.0.jar ...
Download complete.
Downloading: http://repo1.maven.org/maven2/net/bull/javamelody/javamelody-core/1.44.0/javamelody-core-1.44.0.jar.sha1 ...
Download complete.
Downloading: http://repo1.maven.org/maven2/com/lowagie/itext/2.1.7/itext-2.1.7.jar ...
Download complete.
Downloading: http://repo1.maven.org/maven2/com/lowagie/itext/2.1.7/itext-2.1.7.jar.sha1 ...
Download complete.
Downloading: http://repo1.maven.org/maven2/org/jrobin/jrobin/1.5.9/jrobin-1.5.9.jar ...
Download complete.
Downloading: http://repo1.maven.org/maven2/org/jrobin/jrobin/1.5.9/jrobin-1.5.9.jar.sha1 ...
Download complete.
Downloading: /home/matejk/devel/grails/grails-1.3.9/lib/aspectjweaver-1.6.8.jar ...
...

生成的战争文件在 WEB-INF/lib 中有 javamelody、jrobin 和 itext jar。

但是,要求是在另一台机器 (Jenkins) 上使用 JDK 1.6 构建应用程序,每次构建都会对源代码进行干净签出。

java -version
java version "1.6.0_31"
OpenJDK Runtime Environment (IcedTea6 1.13.3) (6b31-1.13.3-1ubuntu1)
OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)

jar 的下载发生在构建过程的后期:

Executing hibernate-1.3.9 plugin post-install script ...
Plugin hibernate-1.3.9 installed
Installing zip /var/lib/jenkins/.ivy2/cache/org.grails.plugins/grails-melody/zips/grails-melody-1.21.0.zip... ...
    [mkdir] Created dir: /var/lib/jenkins/workspace/etermin-2.4/target/projects/etermin-2.4/plugins/grails-melody-1.21
    [unzip] Expanding: /var/lib/jenkins/.ivy2/cache/org.grails.plugins/grails-melody/zips/grails-melody-1.21.0.zip into /var/lib/jenkins/workspace/etermin-2.4/target/projects/etermin-2.4/plugins/grails-melody-1.21
Installed plugin grails-melody-1.21 to location /var/lib/jenkins/workspace/etermin-2.4/target/projects/etermin-2.4/plugins/grails-melody-1.21. ...
Resolving plugin JAR dependencies ...
Downloading: http://repo1.maven.org/maven2/net/bull/javamelody/javamelody-core/1.44.0/javamelody-core-1.44.0.pom ...
Download complete.
Downloading: http://repo1.maven.org/maven2/net/bull/javamelody/javamelody-core/1.44.0/javamelody-core-1.44.0.pom.sha1 ...
Download complete.
Downloading: http://repo1.maven.org/maven2/org/jrobin/jrobin/1.5.9/jrobin-1.5.9.pom ...
Download complete.
Downloading: http://repo1.maven.org/maven2/org/jrobin/jrobin/1.5.9/jrobin-1.5.9.pom.sha1 ...
Download complete.
Downloading: http://repo1.maven.org/maven2/com/lowagie/itext/2.1.7/itext-2.1.7.pom ...
Download complete.
Downloading: http://repo1.maven.org/maven2/com/lowagie/itext/2.1.7/itext-2.1.7.pom.sha1 ...
Download complete.
Downloading: http://repo1.maven.org/maven2/net/bull/javamelody/javamelody-core/1.44.0/javamelody-core-1.44.0.jar ...
Download complete.
Downloading: http://repo1.maven.org/maven2/net/bull/javamelody/javamelody-core/1.44.0/javamelody-core-1.44.0.jar.sha1 ...
Download complete.
Downloading: http://repo1.maven.org/maven2/com/lowagie/itext/2.1.7/itext-2.1.7.jar ...
Download complete.
Downloading: http://repo1.maven.org/maven2/com/lowagie/itext/2.1.7/itext-2.1.7.jar.sha1 ...
Download complete.
Downloading: http://repo1.maven.org/maven2/org/jrobin/jrobin/1.5.9/jrobin-1.5.9.jar ...
Download complete.
Downloading: http://repo1.maven.org/maven2/org/jrobin/jrobin/1.5.9/jrobin-1.5.9.jar.sha1 ...
Download complete.

但是,当使用该 JDK 创建战争时,javamelody、jrobin 和 itext jar 不会被打包。

因此,webapp 的部署和启动失败。

SEVERE: Error configuring application listener of class net.bull.javamelody.SessionListener
java.lang.ClassNotFoundException: net.bull.javamelody.SessionListener
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4153)
  • 从本地目录安装插件的过程是否正确?
  • 任何想法如何解决此问题以使 jar 打包成战争?

谢谢,

伙伴

编辑: 删除 ~/.grails/1.3.9/ 中的 grails 文件后,JDK 6 和 JDK 7 的行为是相同的:

jar 文件未打包,部署失败。

【问题讨论】:

  • 安装插件的过程看起来很好(并且具有预期的效果)。
  • 你试过用run-app运行它吗?这会产生相同的结果吗?
  • 还有一个:如果您提取 WAR(只需解压缩它),它是否包含 WEB-INF/lib/ 中的 JAR 文件?最好缩小范围是构建步骤失败、类路径问题还是一些不错的奇怪的东西......
  • 感谢您的反馈。正如我上面写的,WEB-INF/lib 不包含 jars。 run-app 工作正常。

标签: java grails groovy grails-plugin openjdk


【解决方案1】:

我在将另一个插件与 Grails 1.3.7 集成时遇到了同样的问题

我知道我所说的不是最佳做法,但是我做了这个解决方法。

将插件的 .zip 文件放入项目中您想要的文件夹中,并提交到您的 svn 存储库中。

在您的本地环境中之后,您可以使用 grails installPlugin 脚本指定您要安装的插件。

当您需要在其他机器上构建应用程序时,您也可以在您的项目中放置一个用户可以调用的脚本。 该脚本将包含第一个 grails installPlugin 和之后的 grails war 命令。

另一种方法是,如果您已经检查了插件的所有源代码,例如在名为 myPlugin(名为 my-plugin)的文件夹中,并且您的项目位于文件夹 myProgect 中,并且每个文件夹位于同一目录中,你可以在你的 BuildConfig.groovy 中添加一行代码:

grails.plugin.location.'my-plugin' = "../myPlugin"

很明显,如果插件文件夹不在同一路径中,您可以放置​​正确的路径:

grails.plugin.location.'my-plugin' = "../path/to/plugin/myPlugin"

这种方式不需要调用install plugin方法,grails知道依赖并打包插件。

希望能帮到你 最好的问候。

【讨论】:

  • 谢谢。不幸的是,它没有帮助。插件的部门从未自动包含在内。
【解决方案2】:

您可以设置一个本地存储库管理器,例如 Artifactory,并从该存储库下载 Grails 插件。
您可以为 Grails 插件库创建一个 local Artifactory 存储库,在 Grails 插件库中不可用,然后部署 1.21 版本的 JavaMelody Grails 插件。
接下来,您需要将此本地存储库添加到 Grails 正在从 (BuildConfig.Groovy) 解析的存储库列表中:

groovy grails.project.dependency.resolution = { 
    ... 
    repositories { 
      grailsPlugins() 
      grailsHome() 
      mavenRepo "http://localhost:8081/artifactory/grails-plugins-local/"
      grailsCentral() 
   } 

   plugins { 
      build ":grails-melody:1.21" 
   }
   ...
}

请查看 spring.io 博客中的Managing plugins with Grails 1.3,了解有关此类解决方案的更多详细信息。

【讨论】:

    【解决方案3】:

    我设法解决这个问题的方法是将旋律的 deps 显式包含到 BuildConfig.groovy(从插件的依赖项中复制):

    dependencies {
            // Deps for grails-melody (copied from plugin deps) that are *not* included automatically with plugin.
    
            compile "net.bull.javamelody:javamelody-core:1.44.0"
            compile ("com.lowagie:itext:2.1.7") {
                excludes "bcmail-jdk14", "bcprov-jdk14", "bctsp-jdk14"
            }
            compile "org.jrobin:jrobin:1.5.9"
        }
        plugins {
            compile ":grails-melody:1.21"
        }
    

    我在 Grails JIRA 中发现了一些可能与我遇到的问题有关的错误,并在 2.x 中得到解决

    https://jira.grails.org/browse/GRAILS-7608

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-01
      • 2023-04-10
      • 1970-01-01
      • 2013-12-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多