Grails2.4Java8和Tomcat7.0.55.2
我正在尝试使用grails 2.4.4和tomcat插件运行https站点:Grails2.4Java8和Tomcat7.0.55.2,grails,Grails,我正在尝试使用grails 2.4.4和tomcat插件运行https站点: build ':tomcat:7.0.55.2' 在首次尝试启动应用程序时,我遇到了以下问题: 当我将tomcat的tomcat依赖项更改为tomcat 8.0.22并再次运行应用程序时,它成功了,并且超出了createSSLCertificate(文件keystoreDir)的工作范围,尽管应用程序没有启动。如果我现在将其更改回tomcat 7.0.55.2,则已生成密钥,且应用程序正常工作 我想问题是我不确定Gr
build ':tomcat:7.0.55.2'
在首次尝试启动应用程序时,我遇到了以下问题:
当我将tomcat的tomcat依赖项更改为tomcat 8.0.22并再次运行应用程序时,它成功了,并且超出了createSSLCertificate(文件keystoreDir)的工作范围,尽管应用程序没有启动。如果我现在将其更改回tomcat 7.0.55.2,则已生成密钥,且应用程序正常工作
我想问题是我不确定Graeme指出的修复是否只存在于Tomcat8中,或者是否有一个更高版本的Tomcat7可以用于解决这个问题
虽然这种技术对于开发机器来说还可以,但我真的需要一些更具体的东西,以便通过jenkins等构建应用程序
要在本地重新创建,如果我执行
grails clean-all
试一试
grails run-app -https
我第一次触及这个问题,直到我再次重复上述步骤
想想看,Jenkins制作一个WAR文件实际上可能还不错,不过从开发的角度来看,找到一种更好的方法来实现这一切还是不错的。我自己也遇到过这个问题。我曾尝试过在互联网上找到的其他解决方案,直到我偶然发现 这为我解决了这个问题,并使用-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'
}
}
与:
你试过了吗\n你能升级到grails 2.5.x吗?我就是从这里开始的。我遇到了禁用分叉的问题:创建名为“defaultGrailslongConverter”的bean时出错。。无论如何,据我所知,Grails2.5仍然指向Tomcat7而不是8。这里的问题与Tomcat8中的修复程序有关。感谢您提供此代码片段,它可能会提供一些即时帮助。通过说明为什么这是一个很好的解决问题的方法,正确地解释它的教育价值,并将使它对未来有类似但不完全相同问题的读者更有用。请在回答中添加解释,并说明适用的限制和假设。作为Grails新手,可能很难知道如何编译Tomcatserver插件。关于这一点,我写了一个问题(和答案,但可能有更好的方法):@Björn Martin正在谈论grails tomcat的源项目——您通常会下载插件并在项目中编译它-@Vahid谢谢!我将尝试这个方法,并用我的发现更新我的答案。@Björn有两种选择-你需要保留一个特定插件的本地副本-最简单的方法是将修改后的插件放在本地-并添加一个本地行,然后当你执行grails war时-它会将该本地插件与产品的war文件打包在一起。如果你有像jenkins这样依赖于远程建筑的自动化流程,那么你可能需要一些本地中央回购协议才能将插件放入其中
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
}
}