gpt4 book ai didi

gradle - -dname的keytool在Gradle中包含空格:非法选项

转载 作者:行者123 更新时间:2023-12-03 05:05:44 25 4
gpt4 key购买 nike

我正在尝试创建一个涉及Java keytool二进制文件的任务,但是显然我无法正确传递dname参数。空格似乎是问题所在,但仅当作为Gradle脚本运行时才如此。当我将同一命令复制粘贴到终端时,它将起作用。 (我相信在两种情况下都使用相同的keytool二进制文件。)

这是我的脚本:

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"

...很明显,空间是个问题。但仅当从Gradle内部运行时。

请注意,我的-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参数 see for yourself中必须转义逗号。

最佳答案

幕后,groovy在java.lang.String中添加了execute()方法,该方法将您的字符串分割成一个数组。它可能通过分割空格字符来实现。参见String.execute()

我建议您改用Gradle的Project.exec(Closure)。你可以做类似的事情

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()

关于gradle - -dname的keytool在Gradle中包含空格:非法选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59337713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com