使用 OpenJDK 1.6 构建 war 时,Grails 1.3.9 和 grails-melody : javamelody. jar 未打包

标签 grails groovy grails-plugin java

我们正在维护一个用 Grails 1.3.9 开发的 Web 应用程序。

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

grails 1.3.x 的存储库中似乎不再提供该插件。我是从google-code下载的正如 documentation 中所建议的.

Another post stackoverflow 中建议可以将压缩的插件放入 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 ...
...

生成的 war 文件在 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 创建 war 时,javamelody、jrobin 和 itext jar 不会打包。

因此 web 应用程序的部署和启动失败。

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)
  • 从本地目录安装插件的过程是否正确?
  • 有什么想法可以解决这个问题,使 jars 打包成 war 吗?

谢谢

马泰

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

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

最佳答案

我在将另一个插件与 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"

这种方式不需要调用安装插件方法,grails知道依赖关系并打包插件。

希望能帮到你 致以诚挚的问候。

关于使用 OpenJDK 1.6 构建 war 时,Grails 1.3.9 和 grails-melody : javamelody. jar 未打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24826062/

相关文章:

Grails 2.3 - 运行应用程序不起作用

grails - 在Grails中使用DomainClassPropertyComparator

grails - 如何使用匹配的本地变量名称对GORM对象执行 'where'查询

grails - grails oracle连接超时

grails - 如果表行颜色在gsp中包含某个值,是否可以更改表行颜色?

groovy - 使用 Groovy 进行尾递归

sql - 如何在查询之后正确列出的地方执行SQl?

java - 如何使用传递给方法的参数为 catch 语句设置预期的异常类型?

unit-testing - 为什么即使使用 Spocks 的 Mock() 模拟了底层 Controller ,此方法仍返回 null?

gradle - 带有Intellij的Grails 3.2无法扩展插件类