Groovy: невозможно определить класс при запуске из командной строки - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь запустить отличный сценарий из командной строки. Он отлично работает в gradle-проекте в intellij, но когда я пытаюсь запустить его через командную строку, я получаю несколько ошибок, подобных этой

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup 
failed:
/home/tpulayan/jenkins- 
watcher/src/main/groovy/attempt_authentification.groovy: 1: unable to resolve 
class in.ashwanthkumar.slack.webhook.Slack
@ line 1, column 1.
  import in.ashwanthkumar.slack.webhook.Slack
  ^

1 error

Мой код:

@Grapes(
    @Grab(group='in.ashwanthkumar', module='slack-java-webhook', 
version='0.0.7')
)

import in.ashwanthkumar.slack.webhook.Slack
import in.ashwanthkumar.slack.webhook.SlackMessage
import org.apache.http.HttpException
import org.apache.http.HttpHost
import org.apache.http.HttpRequest
import org.apache.http.HttpRequestInterceptor
import org.apache.http.auth.AuthScheme
import org.apache.http.auth.AuthScope
import org.apache.http.auth.AuthState
import org.apache.http.auth.UsernamePasswordCredentials
import org.apache.http.client.CredentialsProvider
import org.apache.http.client.methods.HttpGet
import org.apache.http.client.protocol.ClientContext
import org.apache.http.impl.auth.BasicScheme
import org.apache.http.impl.client.DefaultHttpClient
import org.apache.http.protocol.BasicHttpContext
import org.apache.http.protocol.ExecutionContext
import org.apache.http.protocol.HttpContext
import org.apache.http.util.EntityUtils


use(TimerMethods) {
    def timer = new Timer()
    def periodSeconds = 600

    new Slack()
            .icon(':exclamation:')
            .sendToChannel('jenkins-monitoring')
            .displayName('Jenkins Watcher')
            .push(new SlackMessage("Jenkins Watcher started at ${new Date()}. Started to monitor the status of deb-jenkins-prd..."))

    def task = timer.runEvery(1000, periodSeconds * 1000) {
        def response = getAuthentication().statusCode
        if (response != 200) {
            new Slack()
                    .icon(':exclamation:')
                    .sendToChannel('jenkins-monitoring')
                    .displayName('Jenkins Watcher')
                    .push(new SlackMessage("Login attempt by Jenkins Watcher failed at ${new Date()}. This could indicate that Jenkins is stuck! Request response code is: ${response}"))
        }
    }
}

Полагаю, это что-то связанное с classpath, но я не смог его решить.

Любая помощь очень ценится!

РЕДАКТИРОВАТЬ ПОСЛЕ ОТВЕТА

Я обновил свой код с помощью @Grab, но, к сожалению, я получаю эту ошибку при запуске из командной строки:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during conversion: Error grabbing Grapes -- [unresolved dependency: in.ashwanthkumar#slack-java-webhook;0.0.7: not found]

java.lang.RuntimeException: Error grabbing Grapes -- [unresolved dependency: in.ashwanthkumar#slack-java-webhook;0.0.7: not found]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)
        at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:77)
        at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:84)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:59)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:238)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:250)
        at groovy.grape.GrapeIvy.getDependencies(GrapeIvy.groovy:464)

1 Ответ

0 голосов
/ 27 июня 2018

в build.gradle кажется, вы определили зависимости.

вы можете поместить все зависимости (* .jar) в ./lib dir и запустить свой Groovy-скрипт следующим образом:

groovy -cp ./lib/* MyScript.groovy

или вы можете указать все зависимости, используя Grape/Grab непосредственно в вашем скрипте groovy, тогда ваша командная строка будет простой и groovy загрузит все зависимости при запуске скрипта

groovy MyScript.groovy
...