Есть ли способ запустить класс groovy без исходного кода? - PullRequest
1 голос
/ 10 января 2020

Я создал файл groovy - MyGroovyFile. groovy.

MyGroovyFile. groovy:

import com.Thirdparty;
println 'Hello world';

Теперь я компилирую этот файл - groovyc MyGroovyFile.groovy. После компиляции MyGroovyFile.class создается.

Теперь я хочу запустить этот класс MyGroovyFile.class в другой папке / на другом компьютере. Но когда я пытаюсь выполнить groovy MyGroovyFile, я получаю сообщение об ошибке: "Caught: java.io.FileNotFoundException: /path/to/file/filename ( /path/to/file/filename)".

Что я здесь не так делаю?

Редактировать 1:

Я импортировал сторонний класс в мой groovy исходный код. Я пытался сделать то, что предложил Матиас. java -cp .:$GROOVY_HOME/lib/groovy-2.5.8.jar:/path/to/thirdparty.jar MyGroovyFile На этот раз я получаю NoClassDefFoundException.

1 Ответ

2 голосов
/ 10 января 2020

Если вы просто хотите запустить код groovy на разных машинах и:

  • , у вас нет дополнительных требований, заставляющих вас компилировать
  • groovy и java устанавливается на все машины, на которых вы хотите запустить

, тогда вам не нужно компилировать код (т.е. не нужно запускать groovyc).

Вы можете просто запустить код, используя:

─➤ groovy MyGroovyFile.groovy

Если вам нужно скомпилировать код, вы можете сделать что-то вроде:

─➤ groovyc MyGroovyFile.groovy 
─➤ java -cp .:/$GROOVY_HOME/lib/groovy-2.5.8.jar MyGroovyFile
Hello World!
─➤

другими словами, если вы хотите запустить класс groovy из java, вам нужно включить jar groovy в путь к классам.

В качестве альтернативы вы можете создать автономный файл jar (обычно называемый «толстым jar»), который содержит groovy lib. Один из способов сделать это - через Gradle. Вам понадобится установить gradle, а затем добавить в каталог build.gradle файл, в котором будет указано что-то вроде следующего:

plugins {
  id 'groovy'
  id 'com.github.johnrengelman.shadow' version '5.2.0'
}

repositories { 
  jcenter()
}

dependencies { 
  implementation 'org.codehaus.groovy:groovy-all:2.5.8'
}

sourceSets {
  main {
    groovy {
      srcDirs = ['.']
    }
  }
}

jar {
  manifest {
    attributes 'Main-Class': 'MyGroovyFile'
  }
}

После чего вы можете создать толстый jar с помощью:

─➤ gradle shadow

BUILD SUCCESSFUL in 2s
2 actionable tasks: 2 executed

и запустите толстую банку, используя:

─➤ java -jar build/libs/WhateverYourFatJarNameIs.jar 
Hello World!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...