#java #kotlin #groovy #jenkins-pipeline #jenkins-groovy
Вопрос:
У меня есть библиотека kotlin, где класс Environment
определяется с помощью конструктора:
data class Environment @JvmOverloads constructor(val name : String, val host: String, val port: Int, val secureConn: Boolean=false,
val user : String = "user", val password : String = "defaultPass", val loginPath : String = "/login",
val trustStorePath: String = "/trustStore.jks", val trustStorePassword: String = "defaultPass",
val disableHostnameVerification: Boolean = true) { ...
Я пытаюсь создать экземпляр этого класса в коде конвейера Дженкинса:
def env = new Environment("name", "host", 7777, true, "username", "pass", "/login", "/cert.jks", "anotherPass", true)
Затем я получаю следующую ошибку:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such constructor found: new package.Environment java.lang.String java.lang.String java.lang.Integer java.lang.Boolean java.lang.String java.lang.String java.lang.String java.lang.String java.lang.String java.lang.Boolean
Но есть именно такой конструктор! В чем может быть проблема?
Также существует декомпилированная версия исходных текстов kotlin. Кажется, это совпадает:
public Environment(@NotNull String name, @NotNull String host, int port, boolean secureConn, @NotNull String user, @NotNull String password, @NotNull String loginPath, @NotNull String trustStorePath, @NotNull String trustStorePassword, boolean disableHostnameVerification)
Комментарии:
1. Я думаю, что это из-за значений по умолчанию в конструкторе
2. Я бы использовал отражение, чтобы проверить во время выполнения, какие классы загружаются и какие конструкторы предоставляются, но я мало что знаю о том, как Дженкинс справляется с этим и доступно ли это из его сценариев. Мне кажется, что он пытается загрузить класс с пакетом канонического имени. Окружающая среда. Это то, чего ты действительно хочешь?
3. @tim_yates Почему? Существует
@jvmOverloads
аннотация, поэтому генерируется множество конструкторов. Я вижу это в декомпилированном файле, и там есть необходимый конструктор. Может быть, проблема в приведении типа?4. Вы пытались отключить этот плагин? issues.jenkins.io/browse/JENKINS-32681
5. Что, если проблема заключается в примитивных типах? Я бы попытался добавить знак вопроса рядом с типом Int и Boolean, чтобы принудительно перевести его в коробочные типы вместо примитивов.