Gradle 带有-dname的keytool在渐变中包含空格:非法选项
我试图创建一个包含JavaKeyTool二进制文件的任务,但显然我无法正确地传递dname参数。空间似乎是个问题,但只有在作为Gradle脚本运行时才是。当我将相同的命令复制粘贴到终端时,它就可以工作了。(我相信在这两种情况下,使用的是相同的keytool二进制文件。) 这是我的剧本:Gradle 带有-dname的keytool在渐变中包含空格:非法选项,gradle,groovy,keytool,Gradle,Groovy,Keytool,我试图创建一个包含JavaKeyTool二进制文件的任务,但显然我无法正确地传递dname参数。空间似乎是个问题,但只有在作为Gradle脚本运行时才是。当我将相同的命令复制粘贴到终端时,它就可以工作了。(我相信在这两种情况下,使用的是相同的keytool二进制文件。) 这是我的剧本: task generateTomcatKeystore() { doLast { def serverAlias = "server_debug" def serverStorePas
task generateTomcatKeystore() {
doLast {
def serverAlias = "server_debug"
def serverStorePass = "changeit_server"
def serverKeyPass = "changeit_server"
def ourDomain = "domain.net"
def ourName = "Company"
def dName = /CN=$ourDomain, OU=Backend, O=$ourName, L=Prague, S=Czech Republic, C=CZ/
def keytoolCommand = /keytool -genkeypair -alias $serverAlias -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -dname "$dName" -validity 365 -keypass $serverKeyPass -keystore tomcat.jks -storepass $serverStorePass/;
// what exactly am I executing?
println keytoolCommand
def outputErr = keytoolCommand.execute().err.text
// errors?
println outputErr
// am I calling the right binary? ...apparently yes
println 'which keytool'.execute().text
}
}
这是我收到的投诉:
Illegal option: OU=Backend,
当我消除dname组件之间的所有空格时,如下所示:
def dName = /CN=$ourDomain,OU=Backend,O=$ourName,L=Prague,S=Czech Republic,C=CZ/
错误更改为:
Illegal option: Republic,C=CZ"
…很明显,空间是个问题。但只有从格拉德尔内部运行时
请注意,my-dname用双引号括起来:
keytool -genkeypair -alias server_debug -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -dname "CN=domain.net,OU=Backend,O=Company,L=Prague,S=Czech Republic,C=CZ" -validity 365 -keypass changeit_server -keystore tomcat.jks -storepass changeit_server
根据Oracle的说法,在dname参数中只需转义逗号,groovy在
java.lang.String
中添加了一个execute()方法,将字符串拆分为数组。它可能通过拆分空格字符来实现这一点。看
我建议你用Gradle's来代替。你可以这样做
ByteArrayOutputStream errorOut = new ByteArrayOutputStream()
exec {
workingDir = "$javaHome/bin"
errorOutput = errorOut
args "keytool -genkeypair -alias $serverAlias -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -dname".split(' ')
args dName
args "-validity 365 -keypass $serverKeyPass -keystore tomcat.jks -storepass $serverStorePass".split(' ')
}
String errors = errorOut.toString()