Запустить класс main из groovy скрипта с использованием grape - PullRequest
1 голос
/ 04 августа 2020

Я хотел бы запустить основной метод класса java с помощью @Grab, чтобы требования выполнялись автоматически. В частности, я хотел бы запустить пример pdfbox https://github.com/apache/pdfbox/blob/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/RemoveAllText.java

Я написал следующий groovy скрипт

#!/usr/bin/env groovy
@Grab('org.apache.pdfbox:pdfbox-examples:2.0.20')
import org.apache.pdfbox.examples.util.RemoveAllText
RemoveAllText.main(args)

@Grab, импорт и выполнение main вроде работает. Но похоже, что основная функция постоянно вспоминает себя, что приводит к ошибке StackOverflowError, как показано ниже.

Caught: java.lang.StackOverflowError
java.lang.StackOverflowError
        at RemoveAllText.main(RemoveAllText.groovy)
        at RemoveAllText$main.call(Unknown Source)
        at RemoveAllText.run(RemoveAllText.groovy:5)
        at RemoveAllText.main(RemoveAllText.groovy)
        ...

Я новичок в groovy, поэтому я не уверен, что я делаю неправильно. Возможно ли то, что я пытаюсь сделать? Если это возможно, как это сделать?

Чтобы пример был полностью воспроизводимым, я получаю указанную выше ошибку, когда использую pdf, найденный по адресу https://github.com/mozilla/pdf.js/raw/v2.4.456/examples/learning/helloworld.pdf и использую версию groovy 2.4.16 устанавливается с использованием репозиториев по умолчанию в Ubuntu 18.04. Выполнение команды будет

groovy RemoveAllText.groovy helloworld.pdf helloworld_out.pdf

Если я вручную загружу необходимые файлы jar и запустил

java -cp pdfbox-2.0.20.jar:commons-logging-1.2.jar:pdfbox-examples-2.0.20.jar org.apache.pdfbox.examples.util.RemoveAllText helloworld.pdf helloworld_out.pdf

, он будет работать без проблем.

1 Ответ

2 голосов
/ 04 августа 2020

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

Проблема в том, что ваш groovy скрипт производит то же имя класса, что и Apache class.

...