web-dev-qa-db-ja.com

GroovyをJavaに自動的に変換する方法はありますか?

私はかなりの量のGroovyコードを継承してきましたが、いくつかの理由で保守が難しいと感じました。

  1. 多くの場合、変数の型が何であるかを判別するのは困難です。
  2. 当然の結果:異なるタイプの変数を変更するのは簡単で、それを意識していません。
  3. 多くのエラーは実行時まで発見されます(ユニットテストがほとんどすべてをカバーしていない場合は怖いです)。
  4. パラメータのタイプは基本的に無視されます。
  5. 私が使用しているIDE(STS Pro)は便利ですが、Javaからはかなり遅れています。たとえば、リファクタリングは利用できません。
  6. 提案が利用可能な場合もあれば、利用できない場合もあります。

言語の簡潔さには感謝しますが、メンテナンスは困難で面倒です。

手動でいくつかの部分をJavaに変換しようとしましたが、それは大変でした。この変換に役立つツールやプラグインを知っていますか?

25
luiscolorado

Groovy ++を使用した代替ソリューションを見つけました。 Groovyのほとんどすべての利点がありますが、パフォーマンスとJavaからの強力な型指定があります。さらに、これはGroovyに基づいているため、明らかに1つのjarファイルと、コードの先頭に「@Typed」アノテーションを追加するだけで済みます。

さらに、「GrUnit」などの新機能が追加され、動的タイプと静的タイプを混在させることができるため、DSLを作成できると思います。そのため、既存のGroovyコードと混合し、Grailsで使用できます。

プロジェクトは若くなりそうですが、本当に有望です。私はすでに水域をテストしていて、どこまで水を飲むことができるかをチェックしています。

したがって、この回答は実際にはGroovyをJavaに変換する方法を示していませんが、さらに優れたものを得ることができます。ワールドプラスとオプションのサードワールドの両方の利点-しゃれは意図されていません:-)-静的型付けとパフォーマンス。

3
luiscolorado

IntelliJ IDEA は、グルーヴィーなコードのリファクタリングをかなり適切にサポートしています。また、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;
}
25
af1n

おそらくあなたが聞きたい答えではないでしょうが、私はコードをJavaに変換しようとするのではなく、Groovyをより快適にすることに焦点を合わせます。 Groovyでできることはたくさんありますが、Java( closures など)にうまく変換されません。Javaは、コードをはるかに読みにくくし、理解しにくくします。

Groovyに固執するように説得できず、Javaに移行する必要がある場合は、手作業で移行するのが最善の策です。

14
dbyrne

Groovy言語とJava言語はどちらも同じバイトコード(Javaプラットフォームバイトコード)にコンパイルされます。したがって、(a).groovyファイルを.classファイルにコンパイルします。(b)次のようなデコンパイラーを使用します。 .classファイルを.Javaファイルに逆コンパイルするJDGUI。

4
Adam Burley

私の一番のヒントはユニットテストをたくさん書くです。

このアドバイスは、ほとんどの動的言語に当てはまります。コンパイラーによる静的型検査から「セーフティネット」が少なくなるためです。テストを追加して、入力値と出力値のタイプが正しいことなどを確認する必要があります。

これでほとんどの問題が解決すると思います。

3
mikera

同様の質問がある方は、GMavenPlusをご覧ください。

0
Ted Xu

1年前にいくつか質問があります。 1か月または2か月の幸福感の幸福感の後、それは現実世界の弱さを変えるものでした。 GReclipse 2.0でもそれほど苦痛はありませんが、コードは管理不能で苦痛になります。あなたの質問への短い答え-いいえ。これを行うための本当の良い道具はありません。 GSql私はSpringJdbcTemplateに置き換え、クロージャはコールバックに置き換えます。これらはすべて、手動で置換戦略を決定する必要があるため、適切なコードを取得する必要がある場合は、整然と行う必要があります。それ以外の場合は、いくつかのJava逆コンパイラーを使用できますが、実際に必要なものではないと思います。

0
Alexey Sviridov

約1000のGroovyクラスをJava 8に変更します。

  • 自動:手動ステップとの組み合わせで可能だと思います

移行の可能なステップ

  • def変数:IDEで正しいクラス名に手動で置き換えます

  • def Methodes:IDEで戻り値として正しいクラス名に手動で置き換えます

  • ファイルの名前変更:すべての.groovyファイルを.Javaファイルに自動的に置き換えます(Java 8)

  • clousures:Java 8 LambdasおよびJava 8 Streams

  • Groovyの上書きされたメソッド:手動で新しいJava jdk Klasses、つまり新しいファイルio、新しい日付API、またはApacheライブラリを含める

ユニットテストを使用して、リファクタリングを制御します。

PS:私達は使用します。 Groovyプラグインを使用したEclipse。

あいさつロエビ

0
Robert Halter