当前位置:  开发笔记 > 运维 > 正文

grails 2.4 java 8和tomcat 7.0.55.2

如何解决《grails2.4java8和tomcat7.0.55.2》经验,为你挑选了1个好方法。

我试图使用带有tomcat插件的grails 2.4.4运行https站点:

build ':tomcat:7.0.55.2'

首次尝试启动应用程序时,我遇到了以下问题:问题648

java.lang.ClassNotFoundException: com.ibm.crypto.tools.KeyTool

当我将tomcat的tomcat依赖项更改为tomcat 8.0.22并再次运行app时,它会成功并超越,即createSSLCertificate(File keystoreDir)工作,尽管应用程序无法启动.如果我现在将其更改回tomcat 7.0.55.2,则已生成密钥并且应用程序正常工作.

我想问题是我不确定Graeme指向的修复程序是否只存在于tomcat 8中,或者是否有更高版本的tomcat 7我可以使用它修复了这个问题.

虽然这个hack对于开发机器来说还可以,但是当我通过jenkins等建立应用程序时,我真的需要更具体的东西.

要在本地重新创建,如果我这样做

grails clean-all 

并尝试

grails run-app -https 

我第一次遇到这个问题,直到我再次重复上述步骤.

考虑到它詹金斯生成一个WAR文件可能实际上很好,虽然从开发的角度来看,找到一个更好的方法来完成这一切仍然很好.



1> Martijn van ..:

我自己也遇到过这个问题.我已经尝试了一些我在互联网上找到的其他解决方案,直到我偶然发现 https://github.com/grails/grails-profile-repository/pull/14/files 这对我来说解决了这个问题并运行我的应用程序用-https

转到TomcatServer.groovy并替换:

protected getKeyToolClass() {
    try {
        Class.forName 'sun.security.tools.KeyTool'
    }
    catch (ClassNotFoundException e) {
        // no try/catch for this one, if neither is foun\d let it fail
        Class.forName 'com.ibm.crypto.tools.KeyTool'
    }
}

有:

protected Class getKeyToolClass() {
    try {
        try {
            // Sun JDK 8
            return Class.forName('sun.security.tools.keytool.Main')
        }
        catch (ClassNotFoundException e1) {
            try {
                // Sun pre-JDK 8
                return Class.forName('sun.security.tools.KeyTool')
            }
            catch (ClassNotFoundException e2) {
                 // no try/catch for this one, if neither is found let it fail
                 return Class.forName('com.ibm.crypto.tools.KeyTool')
            }
        }
    }
    catch (Throwable e) {
        return null
    }
}

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有