Подтвердить что ты не робот

Есть ли способ автоматически преобразовать Groovy в Java?

Я унаследовал значительные количества кода Groovy, и мне было трудно поддерживать его по нескольким причинам:

  • Очень часто трудно определить тип переменной.
  • Следствие: легко изменить переменную с другим типом и не знать об этом.
  • Многие ошибки будут обнаружены до запуска (что страшно, если тестирование вашего устройства не охватывает почти все).
  • Тип параметров в основном игнорируется.
  • Используемая среда IDE (STS Pro) полезна, но значительно отстает от Java. Например, рефакторинг просто недоступен.
  • Предложения доступны несколько раз, другие - нет.

Хотя я ценю компактность языка, техническое обслуживание было трудным и громоздким.

Я попытался вручную преобразовать некоторые части в Java, это была боль. Знаете ли вы о каких-либо инструментах или плагинах, которые помогают в этом преобразовании?

4b9b3361

Ответ 1

Я нашел альтернативное решение, используя Groovy ++. Он имеет почти все преимущества Groovy, но с производительностью и сильным набором из Java. Кроме того, он основан на Groovy, поэтому, видимо, вам нужно добавить только один файл jar и аннотацию "@Typed" в верхней части кода.

Кроме того, он добавляет новые функции, такие как "GrUnit", и позволяет смешивать динамические и статические типы, которые, я надеюсь, позволят создать DSL. Поэтому он позволяет смешивать с существующим кодом Groovy и использовать с Grails.

Проект кажется молодым, но по-настоящему перспективным. Я уже тестирую воду и проверяю, как далеко я могу ее принять.

Итак, этот ответ на самом деле не говорит о том, как преобразовать Groovy в Java, но вы можете получить что-то еще лучше: преимущества как миров плюс, так и факультативного третьего мира - нет каламбура:-) - статическая типизация и производительность.

Ответ 2

Вероятно, это не тот ответ, который вы хотите услышать, но я бы сосредоточился на том, чтобы стать более комфортным с Groovy вместо того, чтобы пытаться преобразовать код в Java. В Groovy есть много вещей, которые просто не будут хорошо переводить на Java (например, closures). Любое автоматическое преобразование в Java сделает код менее понятным и понятным.

Если вы не можете убедить вас придерживаться Groovy, и вы ДОЛЖНЫ перейти на Java, лучше всего сделать это вручную.

Ответ 3

IntelliJ IDEA имеет вполне приличную поддержку для рефакторинга кода groovy. Он также имеет конвертер уровня исходного кода из groovy → Java. В большинстве случаев он генерирует код, который не компилируется, но может помочь вам начать процесс конвертации кода. Groovy код:

class HelloWorld {
def name
def greet() { "Hello ${name}" }
int add(int a, int b) {
    return a+b;
}
}

Преобразованный код Java:

public class HelloWorld {
public GString greet() {
    return "Hello " + String.valueOf(name);
}

public int add(int a, int b) {
    return a + b;
}

public Object getName() {
    return name;
}

public void setName(Object name) {
    this.name = name;
}

private Object name;
}

Ответ 4

Языки Groovy и Java компилируются в один и тот же байт-код (Java-байт-код). Итак, просто (а) скомпилируйте ваш .groovy файл в файл .class; (b) использовать декомпилятор, такой как JDGUI, для декомпиляции вашего .class файла в файл .java.

Ответ 5

Мой верхний совет напишет множество модульных тестов.

Этот совет верен для большинства динамических языков, потому что вы получаете меньше "защитной сетки" от проверки статического типа компилятором. Вы хотите добавить тесты, чтобы проверить, что входные и выходные значения имеют правильный тип и т.д.

Я думаю, что это решит большинство ваших проблем.

Ответ 6

имеет какой-то вопрос год назад. После одного или двух месяцев эйфории groovy, это был чейнджер на реальном мире слабый. Даже GReclipse 2.0 не делает меньше боли, код становится неуправляемым и болезненным. Короткий ответ на ваш вопрос - нет. Для этого нет реального инструмента. GSql я заменяю на Spring JdbcTemplate, закрывает обратные вызовы. Все это требует ручного решения о замене стратегии, поэтому, если вы хотите получить хороший код, вам нужно сделать int manauly. Кроме того, вы можете использовать некоторые декомпиляторы java, но я думаю, что это не то, что вы действительно хотите.

Ответ 7

Мы изменили бы примерно 1000 Groovy Классы на Java 8.

  • автоматически: я думаю, что это возможно в комбинации с ручными шагами.

Возможные шаги для миграции

  • def Переменные: замените вручную правильное имя класса в среде IDE

  • def Методы: замените вручную правильное имя класса как возвращаемое значение в среде IDE

  • Переименование файлов: автоматически заменить все файлы .groovy на .java файлы (Java 8)

  • clousures: заменить вручную с помощью Java 8 Lambdas и Java 8 Streams

  • Groovy overritten Методы: замените вручную более новыми Java jdk Klasses, т.е. Новый файл io, API новой даты или включите библиотеки Apache

Используйте свои тесты единиц, чтобы управлять рефакторингом.

PS: Мы знаем. Eclipse с плагином Groovy.

Приветствия Roebi

Ответ 8

для кого-то, у кого есть аналогичный вопрос, вы можете взглянуть на GMavenPlus