#groovy #static-methods #missingmethodexception
Вопрос:
Я попытался вызвать статический метод класса ArtifactoryClientBuilder
(исходящий из artifactory-java-client-services-2.9.2.jar) и получил groovy.lang.MissingMethodException: No signature of method
, хотя метод существует.
Код для этого был:
import org.jfrog.artifactory.client.ArtifactoryClientBuilder
class Test {
static void main(String[] args) {
// Just to check/proof if there is a method 'create'
def acb = new ArtifactoryClientBuilder().getClass().getMethods()
acb.each {
String s = "$it"
if (s.contains("create")) {
println "Found method: $s"
}
}
// Call static method
def a = ArtifactoryClientBuilder.create()
}
}
Я положил artifactory-java-client-services-2.9.2.jar к ~/.заводной/либ и сделал
заводной -d Тест.заводной
В результате получилось:
Found method: public static org.jfrog.artifactory.client.ArtifactoryClientBuilder org.jfrog.artifactory.client.ArtifactoryClientBuilder.create()
Caught: groovy.lang.MissingMethodException: No signature of method: static org.jfrog.artifactory.client.ArtifactoryClientBuilder.create() is applicable for argument types: () values: []
Possible solutions: grep(), stream(), print(java.lang.Object), each(groovy.lang.Closure), isCase(java.lang.Object), grep(java.lang.Object)
groovy.lang.MissingMethodException: No signature of method: static org.jfrog.artifactory.client.ArtifactoryClientBuilder.create() is applicable for argument types: () values: []
Possible solutions: grep(), stream(), print(java.lang.Object), each(groovy.lang.Closure), isCase(java.lang.Object), grep(java.lang.Object)
at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1568)
at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1554)
at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:50)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)
at plugins.cleaner.deleteOutdatedLocalRepoArtifacts.Test.main(Test.groovy:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1513)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:1001)
at groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:263)
at groovy.lang.GroovyShell.run(GroovyShell.java:360)
at groovy.lang.GroovyShell.run(GroovyShell.java:349)
at groovy.ui.GroovyMain.processOnce(GroovyMain.java:652)
at groovy.ui.GroovyMain.run(GroovyMain.java:398)
at groovy.ui.GroovyMain.access$1400(GroovyMain.java:68)
at groovy.ui.GroovyMain$GroovyCommand.process(GroovyMain.java:322)
at groovy.ui.GroovyMain.processArgs(GroovyMain.java:142)
at groovy.ui.GroovyMain.main(GroovyMain.java:115)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:111)
at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:129)
Хотя метод pubic static create() был найден, его вызов приводит к исключению Missingmethod.
В чем причина этого и как это исправить?
Мы будем признательны за любую помощь. Спасибо.
Комментарии:
1.Мне кажется забавным, что Groovy позволяет вам использовать
protected
конструктор, но не позволяет вызыватьpublic
create()
метод … Извините, но я понятия не имею, как это решить.2. Одних только клиентских служб недостаточно, чтобы получить эту ошибку-у нее есть несколько переходных состояний. Пожалуйста, добавьте соответствующую информацию, чтобы воспроизвести эту точную проблему (какие файлы с какими контрольными суммами находятся в вашем ~/.groovy/lib и т.д.). Наивный проект gradle с добавлением клиентских сервисов: WFM™.
3. Создал проект quick Gradle с зависимостью JFrog и тестовым классом, и для меня он, похоже, работает без ошибок. github.com/twcrone/groovy-missing-method
Ответ №1:
Спасибо за ваш ценный вклад, который помог мне понять, в чем дело.
Оказалось, что «httpclient-4.5.13.jar» пропал без вести. Итак, в приведенном выше примере у меня есть следующие банки в моей ~/.groovy/lib:
-rw-r--r--@ 1 dl10skd staff 71369 3 Aug 09:25 artifactory-java-client-api-2.9.2.jar
-rw-r--r--@ 1 dl10skd staff 224679 3 Aug 09:25 artifactory-java-client-services-2.9.2.jar
-rw-r--r-- 1 dl10skd staff 780321 4 Aug 11:29 httpclient-4.5.13.jar
-rw-r--r--@ 1 dl10skd staff 328436 3 Aug 09:25 httpcore-4.4.14.jar
и теперь это работает.