Project Lombokを使用しても安全ですか?[閉まっている]


436

Project Lombokが知らない場合は、アノテーション付きのゲッターとセッターの生成などのJavaの煩わしさや、@Dataによる生成のような単純なJavaBeanでさえ役立ちます。特に、ゲッターで作成および非表示にする必要のある最大7つの異なるフィールドがある50の異なるイベントオブジェクトで、それは本当に私に役立ちます。これで約1000行のコードを削除できました。

しかし、長期的には後悔する決断になるのではないかと心配しています。##Java Freenode私が言及すると、Flamewarsがチャネルで噴火します。コードスニペットを提供すると、ヘルパーの可能性を混乱させ、人々はJavaDocの不足について不満を抱き、将来のコミッタはとにかくそれをすべて削除する可能性があります。私はポジティブなことを本当に楽しんでいますが、ネガティブなことを心配しています。

だから:どんな規模のプロジェクトでも、Lombokを使用しても安全ですか?プラスの効果はマイナスの価値がありますか?


5
コメントの時点で、jdk9コンパイラサポート#985は未解決です。Java 9のパッケージシステムではjavac、内部sun.*クラスへのアクセスを開くために、多くのCLIオプションを追加する必要があります((
gavenkoa


最近のプロジェクトでは、javacに組み込まれているアノテーションプリプロセッサを使用してこのようなことを行っています。このメカニズムは標準であり、優れたプログラマがこれを知っていることが期待できます。
するThorbjörnRavnアンデルセン

回答:


181

Project Lombokは、提案された新しいプロジェクトに大きな技術的利点をもたらすと既に決めているようです。(最初から明確にするために、私はプロジェクトロンボクについて特定の見方をしているわけではありません。)

一部のプロジェクト(オープンソースまたはその他の賢明なプロジェクト)でProject Lombok(またはその他の革新的なテクノロジー)を使用する前に、プロジェクトの利害関係者がこれに同意していることを確認する必要があります。これには、開発者、および重要なユーザー(公式または非公式のスポンサーなど)が含まれます。

あなたはこれらの潜在的な問題に言及します:

Flamewarsは## Java Freenodeチャネルで噴火します。

簡単です。フレームウォーズを無視する/参加しない、または単にロンボクについて言及しない。

コードスニペットを提供すると、可能なヘルパーが混乱します。

プロジェクト戦略がロンボクを使用することである場合、可能なヘルパーはそれに慣れる必要があります。

人々はJavaDocがないことに不満を言うでしょう、

それが彼らの問題です。彼らの組織のソースコード/ドキュメントルールをサードパーティのオープンソースソフトウェアに厳密に適用しようとする人はいないでしょう。プロジェクトチームは、使用するテクノロジに適したプロジェクトソースコード/ドキュメント標準を自由に設定できる必要があります。

FOLLOWUP -Lombok開発者は、合成されたgetterおよびsetterメソッドに対してjavadocコメントを生成しないことが問題であることを認識しています。これがプロジェクトの主要な問題である場合、1つの代替策は、これに対処するためにLombokパッチを作成して送信することです。 )

そして将来のコミッターはとにかくそれをすべて削除するかもしれません。

それはオンではありません!合意されたプロジェクト戦略がロンボクを使用することである場合、不必要にロンボクをデコミするコミッターは懲罰を受け、必要に応じてコミット権を撤回する必要があります。

もちろん、これは開発者を含む関係者からの賛同を得ていることを前提としています。そして、それはあなたがあなたの原因を議論する準備ができていて、不可避の反対意見を適切に処理することを前提としています。


77
ロンボクの開発者として、私はjavadocの生成が技術的に可能であると言えます。それを実装する方法についてのアイデアがある場合は、Googleグループに参加してください。つまり、標準のテキストを生成するだけではそれほど役に立ちません。getFooと同様に、fooを返し、setFooはfooを設定しますか?それはどのように役立ちますか?
Roel Spilker、

177
ビーンゲッター/セッター用のjavadocは、良いというよりは害が大きいと思います。これらのメソッドは、Javadocに追加する必要のない、よく理解されている規則に従っています。それだけでノイズが増えます。ゲッターとセッターが予期しない何かをしたとき、つまり副作用があるときにのみ、ドキュメントを追加します。
GaryF

9
javadocの注釈が、ロンボクされたコード用のjavadocを生成した場合、ゲッターとセッターがまったく表示されないという事実を参照している可能性があることに気づきました。それを修正する方法は、あなたのDelombokedコードでjavadocを実行することです。
Roel Spilker、

14
@GaryF本当に?値がnullになる可能性があるかどうかを文書化してみませんか?または数値の許容範囲は?または、文字列値の許容される長さやフォーマットは?または、文字列値がエンドユーザーへの表示に適しているかどうか。または、プロパティの名前が完全に説明できない場合に、プロパティの実際の意味を文書化しますか?(JList.getLayoutOrientationJList.setLayoutOrientationが思い浮かびます。)
VGR

21
@VGR私はあなたが一般的に言っていることに同意しますが、その特定のケースでのより良い解決策は、コメントではなく名前を付けることです。すなわちgetCreationDategetDueDate。ネーミングは、可能であればコメントよりも優先されます。
GaryF 2015年

850

今日ロンボクを使い始めました。これまでのところ私はそれを気に入っていますが、言及されていなかった1つの欠点はリファクタリングのサポートでした。

で注釈が付けられたクラスがある場合@Data、フィールド名に基づいてゲッターとセッターが生成されます。これらのゲッターの1つを別のクラスで使用する場合、フィールドの名前が適切でないと判断すると、それらのゲッターとセッターの使用法が見つからず、古い名前が新しい名前に置き換えられます。

これはLombok経由ではなくIDEプラグイン経由で行う必要があると思います。

更新(2013年1月22日)
Lombokを3か月間使用した後も、ほとんどのプロジェクトで推奨しています。しかし、上に挙げたものと同様の別の欠点を見つけました。

あなたはクラスを持っている場合は、と言うMyCompoundObject.javaことは、2人のメンバー、と注釈付きの両方を持っている@Delegate、と言うmyWidgetsと、myGadgetsあなたが呼び出すときに、myCompoundObject.getThingies()別のクラスから、それはそれはに委任だかどうかを知ることは不可能ですWidgetGadgetあなたはIDE内のソースにはもはやジャンプをすることができるので。

Eclipseの「デリゲートメソッドの生成...」を使用すると、同じ機能が提供され、同様に迅速に、ソースジャンプが提供されます。欠点は、重要なものからフォーカスを外す定型コードでソースが乱雑になることです。

更新2(2013年2月26日)
5か月が経過した後も、私たちはまだロンボクを使用していますが、他にもいくつかの問題があります。宣言されたgetterとsetterがないと、新しいコードに慣れ親しんでいるときに迷惑になることがあります。

たとえば、メソッドが呼び出されgetDynamicCols()たのにそれが何であるかわからない場合、このメソッドの目的を特定するためにジャンプするためにいくつかのハードルがあります。一部のハードルはLombokであり、一部はLombokスマートプラグインの欠如です。ハードルは次のとおりです。

  • JavaDocsの欠如。フィールドをjavadocする場合、ゲッターとセッターがLombokのコンパイル手順を通じてそのjavadocを継承することを望みます。
  • メソッド定義にジャンプすると、クラスにジャンプしますが、ゲッターを生成したプロパティにはジャンプしません。これはプラグインの問題です。
  • メソッドを生成またはコーディングしない限り、getter / setterにブレークポイントを設定することはできません。
  • 注:このリファレンス検索は、私が最初に思ったように問題ではありません。ただし、アウトラインビューを有効にするパースペクティブを使用する必要があります。ほとんどの開発者にとって問題ではありません。私の問題は、私のOutlineビューをフィルター処理するMylynを使用しているため、メソッドが表示されなかったことです。 参照の検索の欠如。呼び出し元を確認したい場合は、参照をgetDynamicCols(args...)検索できるようにセッターを生成またはコーディングする必要があります。

更新3(13年3月7日)
私は、Eclipseでさまざまな方法を使用する方法を学習していると思います。Lombokで生成されたメソッドに実際に条件付きブレークポイント(BP)を設定できます。Outlineビューを使用すると、メソッドを右クリックしてにアクセスできますToggle Method Breakpoint。次に、BPにアクセスすると、デバッグVariablesビューを使用して、生成されたメソッドのパラメーターの名前(通常はフィールド名と同じ)を確認し、最後にBreakpointsビューを使用してBPを右クリックしBreakpoint Properties...、条件を追加することを選択できます。いいね。

UPDATE 4(Aug 16 '13)
Maven pomでLombokの依存関係を更新すると、Netbeansは気に入らなくなります。プロジェクトは引き続きコンパイルされますが、Lombokが作成しているメソッドを認識できないため、ファイルにはコンパイルエラーのフラグが付けられます。Netbeansキャッシュをクリアすると、問題が解決します。Eclipseのように「クリーンプロジェクト」オプションがあるかどうかはわかりません。軽微な問題ですが、知らせたいと思っていました。

更新5(2014年1月17日)
Lombokは、Groovyで常にうまくいくとは限りませんgroovy-eclipse-compiler。少なくとも。コンパイラのバージョンをダウングレードする必要があるかもしれません。 Maven GroovyおよびJava + Lombok

更新6(2014年6月26日)
警告の言葉。ロンボクはやや中毒性があり、何らかの理由でそれを使用できないプロジェクトに取り組む場合、それはあなたの腹を立てます。まったく使用しない方がよい場合があります。

更新7(14/07/23) OPが尋ねたロンボクを採用すること
安全性に直接対処するため、これは少し興味深い更新です。

v1.14以降、@Delegateアノテーションは試験運用ステータスに降格されました。詳細は彼らのサイト(Lombok Delegate Docs)に文書化されています。

問題は、この機能を使用している場合、バックアウトオプションが制限されていることです。オプションは次のとおりです。

  • @Delegate注釈を手動で削除し、デリゲートコードを生成/ハンドコードします。アノテーション内で属性を使用している場合、これは少し難しくなります。
  • アノテーションが付いているファイルをDelombokし、必要な@Delegateアノテーションを追加します。
  • Lombokを更新したり、フォークを保守したりしないでください(または、体験的な機能を使用して生活する)。
  • プロジェクト全体をDelombokし、Lombokの使用を停止します。

私の知る限り、Delombokには注釈のサブセットを削除するオプションがありません。少なくとも1つのファイルのコンテキストでは、それはすべてかゼロかです。Delombokフラグを使用してこの機能をリクエストするためのチケットをオープンしましたが、近い将来にはそうは思われません。

更新8(10月20日'14)
Groovyは、Lombokと同じ利点のほとんどに加えて、@Delegateを含む他の機能のボートロードを提供します。考えている力にアイデアを売り込むのが難しいと思う場合は、@CompileStaticまたは@TypeCheckedアノテーションを見て、それがあなたの目的に役立つかどうかを確認してください。実際、Groovy 2.0リリースの主な焦点は静的な安全性でした。

更新9(2015年9月1日)
ロンボクは依然として積極的に維持および強化されており、採用の安全性のレベルによくつながります。@Builderの注釈は私のお気に入りの新機能の1つです。

更新10(2015年11月17日)
これはOPの質問に直接関連しているようには見えないかもしれませんが、共有する価値があります。作成する定型コードの量を減らすのに役立つツールを探している場合は、Google Auto、特にAutoValueを確認することもできます。あなたが彼らのスライドデッキを見れば、彼らが解決しようとしている問題の可能な解決策としてリストロンボク。彼らがロンボクについてリストする短所は次のとおりです:

  • 挿入されたコードは非表示です(コードが生成するメソッドを「見る」ことはできません)[ed note-実際には表示できますが、逆コンパイラが必要です]
  • コンパイラのハックは非標準で壊れやすい
  • 「私たちの見解では、あなたのコードはもはや本当のJavaではありません」

彼らの評価にどれだけ同意するかわかりません。また、スライドに記載されているAutoValueの短所を考慮して、私はLombokを使い続けます(Groovyがオプションでない場合)。

UPDATE 11(16年2月8日)Spring Roo同様の注釈がいくつかある
ことがわかりました。Rooがまだ物事であり、アノテーションのドキュメントを見つけるのが少しおおざっぱであることを知って少し驚いた。削除もde-lombokほど簡単には見えません。ロンボクはより安全な選択のようです。

UPDATE 12(16年2月17日)
現在取り組んでいるプロジェクトにロンボクを持ち込むことが安全である理由を考え出そうとしたところ、v1.14構成システム」で追加された金が見つかりました。これは、チームが安全でない、または望ましくないと考える特定の機能を許可しないようにプロジェクトを構成できることを意味します。さらに良いことに、さまざまな設定でディレクトリ固有の設定を作成することもできます。これはすごいです。

更新13(16年10月4日)
この種のことが重要である場合、オリバーギルケ、ロンボクをSpring Data Rest追加しても安全だと感じました。

UPDATE 14(Sep 26 '17) OPに関する質問のコメントで@gavenkoa
指摘したように、JDK9コンパイラーのサポートはまだ利用できません(Issue#985)。また、Lombokチームが回避するのは簡単ではないようです。

UPDATE 15(
2018 年3月26日) Lombokの変更ログでは、v1.16.20以降、「#985がまだ開いている場合でも、JDK1.9でのLombokのコンパイルが可能になりました示されています。

ただし、JDK9に対応するための変更には、いくつかの重大な変更が必要でした。構成のデフォルトの変更からすべて分離されています。彼らが重大な変更を導入したことは少し心配ですが、バージョンは「インクリメンタル」バージョン番号(v1.16.18からv1.16.20への変更)のみを増加させました。この投稿は安全性に関するものだったのでyarn/npm、最新のインクリメンタルバージョンに自動的にアップグレードするようなビルドシステムがあると、失礼な目覚めに陥るかもしれません。

更新16(19年1月9日)

そうですJDK9の問題が解決されたとロンボク島は、私の知る限りとしてJDK10、とさえJDK11で動作します。

安全面から懸念されていたのですが、v1.18.2からv1.18.4への変更ログで2つのアイテムがBREAKING CHANGE!?Semverの「パッチ」アップデートで重大な変更がどのように行われるかはわかりません。パッチバージョンを自動更新するツールを使用している場合、問題になる可能性があります。


49
おかげで、これはOPが哲学的な応答とは対照的に本当に求めていた情報だったと思います。
chaostheory 2013年

14
UPDATE 6Scalaによく似ています:)
mauhiz

5
@mauhizそしてGroovy。少なくともテストのためにGroovyやScalaを使用できない場所で作業しなければならなかったとしたら、おそらく短時間で終了するでしょう。
Snekse、2015年

8
私はあなたの時系列的なスタイルの応答の更新が本当に好きです。特にこのスタイルの質問/応答の場合、それは本当に役立ちます。
MattG 2016

4
Java 9のサポートが利用可能になったようです。回答を更新できます。 stackoverflow.com/questions/41520511/...
leventunver

115

必要に応じて、先に行くと、ロンボクを使用すると、あなたは「delombok」あとからコードすることができますhttp://projectlombok.org/features/delombok.html


5
@fastcodejavaで「+1 for x」と言うとき、xはリストされたポイントの1つであり、唯一のポイントではない:)
KeremBaydoğanMay

7
この特定の状況では、「+ 1 for delombok」を「long live delombok」と解釈しました。私はそれが好きです。
ゾルタン2015

1
「+1 for delombok」-クライアントに提供されるプロジェクトでロンボクを使用する場合に特に当てはまります。lombokのすべての利点を活用して、クライアントにlombokに依存せずにクリーンなjarを表示させることができます。
fwonce

「大丈夫、私はロンボクを試してみます、そして私がそれが気に入らないなら私はデロンボクだけをしよう」と考えている人のために:よく考えてください。Delombokの実行は骨の折れるプロセスです。そして、結果のコードはLombokの場合と同じように動作しますが、完全に混乱します。
AJPerez

75

個人的に(そして主観的に)Lombokを使用すると、ハッシュコードや等号などの複雑なメソッドのIDE /独自の実装と比較して、達成しようとしていることについてコードがより表現力豊かになることがわかりました。

使用する場合

@EqualsAndHashCode(callSuper = false, of = { "field1", "field2", "field3" })

どのIDE /独自の実装よりも、EqualsとHashCodeの一貫性を保ち、評価するフィールドを追跡する方がはるかに簡単です。これは、フィールドを定期的に追加/削除する場合に特に当てはまります。

同じことが@ToStringアノテーションとそのパラメーターにも当てはまり、インクルード/エクスクルードフィールド、ゲッターの使用またはフィールドアクセス、および呼び出すかどうかに関する望ましい動作が明確に伝えられますsuper.toString()

また、クラス全体に@Getteror @Setter(AccessLevel.NONE)(およびオプションで分岐メソッドをオーバーライドする)アノテーションを付けると、フィールドで使用できるメソッドがすぐにわかります。

メリットは次々と続きます。

私の考えでは、コードを減らすことではなく、Javadocや実装から理解する必要があるのではなく、達成したいことを明確に伝えることです。削減されたコードは、分岐方法の実装を見つけやすくするだけです。


21
さらに、Lombokに切り替えると、equals / hashCodeの実装の不一致、およびフィールドが追加されたときに現在生成されているメソッドを更新し忘れたために、過去の複雑なバグを実際に解決できました。これらの潜在的な利点は、あなたが言及したネガティブのほとんどをバランスさせることができるはずです。
Tim

25

ロンボクは素晴らしいですが...

ロンボクは、新しいソースファイルを生成しないという点で、注釈処理のルールに違反しています。これは、ゲッター/セッターなどが存在することを期待している場合、別の注釈プロセッサで使用できないことを意味します。

注釈処理は一連のラウンドで実行されます。各ラウンドでは、それぞれが実行するためのターンを取得します。ラウンドの完了後に新しいJavaファイルが見つかった場合は、別のラウンドが開始されます。このように、新しいファイルを生成するだけの場合、注釈プロセッサの順序は重要ではありません。lombokは新しいファイルを生成しないため、新しいラウンドが開始されないため、lombokコードに依存する一部のAPは期待どおりに実行されません。これは、mapstructを使用するときに私にとって大きな痛みの原因でした。また、delombok-ingは、ログの行番号を破壊するため、有用なオプションではありません。

私は最終的にビルドスクリプトをハッキングして、lombokとmapstructの両方で動作しました。しかし、私はそれがどれほどハックであるか-少なくともこのプロジェクトでは-ロンボクをドロップしたいと思います。私はいつもロンボクを他のものに使っています。


22

ロンボク島についての意見を読み、実際にいくつかのプロジェクトで使用しています。

さて、ロンボクとの最初の接触で私は悪い印象を持っていました。数週間後、私はそれが好きになりました。しかし、数か月後、私はそれを使用する多くの小さな問題を理解しました。ですから、ロンボクについての私の最終的な印象はそれほどポジティブではありません。

このように考える私の理由:

  • IDEプラグインの依存関係。LombokのIDEサポートはプラグインを通じて行われます。ほとんどの場合、問題なく動作しますが、IDEの将来のリリースや言語バージョン(Java 10+は言語の開発を加速する)で維持されるこのプラグインの人質です。たとえば、Intellij IDEA 2017.3から2018.1に更新しようとしましたが、実際のlombokプラグインのバージョンに問題があり、プラグインが更新されるのを待つ必要があったため、それを行うことができませんでした...これも問題ですLombokプラグインがサポートされていない、より代替的なIDEを使用したいと考えています。
  • 「使用法を見つける」問題。。Lombokを使用すると、生成されたゲッター、セッター、コンストラクター、ビルダーメソッドなどが表示されません。そのため、これらのメソッドがIDEによってプロジェクトで使用されている場所を見つけることを計画している場合、これを見るだけでは実行できません。この隠しメソッドを所有するクラスの場合。
  • 開発者がカプセル化を壊すことを気にしないほど簡単です。ロンボク島の問題ではないことを知っています。しかし、どのメソッドを表示する必要があるかを制御する必要がないという開発者の大きな傾向がありました。そのため、多くの@Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor場合、クラスは本当に公開する必要があるメソッドを考えずに、注釈ブロックをコピーして貼り付けます。
  • Builder Obssession ©。私はこの名前を発明しました(降りて、マーティンファウラー)。冗談ですが、ビルダーは非常に簡単に作成できるため、クラスに2つのパラメーターしかない場合でも、開発者@Builderはコンストラクターや静的コンストラクターメソッドの代わりに使用することを好みます。時には、ロンボクビルダー内にビルダーを作成しようとして、のような奇妙な状況を作成することもありますMyClass.builder().name("Name").build().create()
  • リファクタリング時の障壁。たとえば、を使用@AllArgsConstructorしていて、コンストラクターにパラメーターをもう1つ追加する必要がある場合、IDEは、クラスをインスタンス化しているすべての場所(主にテスト)にこの追加のパラメーターを追加するのに役立ちません。
  • ロンボク島と具体的な方法の混合。すべてのシナリオでLombokを使用してゲッター/セッターなどを作成することはできません。したがって、これらの2つのアプローチがコードに混在していることがわかります。あなたはしばらくしてこれに慣れますが、言語のハックのように感じます。

別の答えが言ったように、Javaの冗長性に腹を立てており、Lombokを使用してそれに対処している場合は、Kotlinを試してください。


8
私はKotlinに行くか、プレーンJavaのままにします。Lombokの問題を回避するために、Javaコードを入力しないことで節約するよりも多くの時間を費やす場合があります。
jediz

1
冗長性のためにJavaを嫌う人は誰でも、コードを冗長にしないといけないのは彼の責任です...
ニコラス

17

長期的なメンテナンスのリスクもあります。まず、ロンボクが実際にどのように機能するかについて読むことをお勧めします。たとえば、開発者からの回答はこちらです。

公式サイトには、Reinier Zwitserlootからの次の引用を含む、マイナス面のリストも含まれています

それは完全なハックです。非公開APIを使用する。予想外のキャスト(javacで実行されている注釈プロセッサがJavacAnnotationProcessorのインスタンスを取得することを知っている)これは、AnnotationProcessor(インターフェース)の内部実装であり、ライブASTで取得するために使用される追加のメソッドが2つあります) 。

Eclipseでは、間違いなく悪い(そしてより堅牢な)-Javaエージェントを使用して、Eclipseの文法とパーサークラスにコードを挿入します。もちろん、これは完全に非公開のAPIであり、完全に制限されています。

lombokが標準APIで行うことを実行できたとしたら、私はそのようにしたでしょうが、できません。それでも、その価値のために、Java 1.6で実行されるEclipse v3.5用のEclipseプラグインを開発しました。変更を加えることなく、Java 1.5で実行されるEclipse v3.4でも機能するため、完全には壊れません。

要約すると、Lombokは開発時間をいくらか節約しますが、下位互換性のないjavacアップデートがある場合(たとえば、脆弱性の緩和)、Lombokは古いバージョンのJavaを使用し続け、開発者はそれらの使用を更新するためにスクランブルします。内部API。これが深刻なリスクであるかどうかは、プロジェクトによって明らかに異なります。


8
Lombokを使用できなくなった場合に備えて、delombokを実行し、Lombokなしで開発を続行してください。
vladich 2017

3
これは、眼鏡をかけて運転することを学び、運転試験の前に眼鏡を失うことに似ています。チームがLombokされたコードでの作業に慣れていて、重大な変更が原因で突然プロセスを変更せざるを得ない場合、それは進行中のプロジェクトに大きな影響を与えます。このリスクを完全に回避し、文書化されていない機能に依存しないフレームワーク、またはそのままの機能をそのまま提供するScalaのような言語を使用する方が良いでしょうか?
dskrvk 2018年

15

私は遅れていることはわかっていますが、誘惑に抵抗することはできません。ロンボクが好きな人は、Scalaも見ておくべきです。ロンボクで見つけられる多くの優れたアイデアは、Scala言語の一部です。

あなたの質問について:Scalaよりも開発者にLombokを試させる方が間違いなく簡単です。試してみて、気に入ったらScalaを試してください。

免責事項として:私もJavaが好きです!


私はScalaとLombokが好きですが、あなたが話しているアイデアがわかりません。\ @SneakyThrows、\ @ Data、...?
sinuhepop 2013

2
@sinuhepopゲッターとセッターの生成はCase Classesのように見えます。不変の機能はScalaに固有であり、独自のメソッドに関するAPIを充実させることも、Scalaの組み込み機能です。
sorencito 2013

5
コトリンも試してみてください
jediz

15

ほぼすべてのプロジェクトで1年間Lombokを使用してきましたが、残念ながら削除しました。当初は非常にクリーンな開発方法でしたが、新しいチームメンバー用の開発環境を設定するのは簡単で簡単ではありませんでした。それが頭痛になったとき、私はそれを取り除きました。しかし、これは良い作業であり、設定をさらに簡単にする必要があります。


27
あなたは頭痛を詳しく説明できますか?
Kevin Welker、2012

2
Eclipseの設定は非常に簡単です。「java -jar lombok.jar」だけです。

14
新しい開発者を設定する際の最も難しい部分は、Lombokを設定する必要があることに気づくことです。「Lombokがセットアップされていません」などのメッセージは表示されません。代わりに、「setFoo」が定義されていないなどの奇妙なメッセージが表示されます。ロンボクの教育が新しい開発者のオンボードトレーニングプロセスの一部ではない場合、大きな混乱が生じます。
Snekse 2014

@Snekse。どのロンボクプラグインバージョンがintellijアイデアの通知と提案を導入したかは正確にはわかりません(赤いログと提案がユーザーに注釈を有効にするように促すためにエラーログにポップアップし、構成セクションへのリンクも提供しました)が、アイデア2016.3 0.13.16プラグインバージョンには、この便利なサポートが含まれています。
jtonic

2
ロンボクアイデアプラグイン(バージョン0.13.16を使用)は、アノテーションプロセッサが構成されていないことをユーザーに通知するサポートを最近導入し、aptを有効にする構成設定セクションへのリンクも提供します。のスクリーンショットをご覧ください。postimg.org/image/5tm2zzvkh
jtonic 16

11

私のチームにプロジェクトを見せたときの熱意は高かったので、チームの反応を恐れてはいけないと思います。

  • ROIに関しては、統合は簡単で、基本的な形式でコードを変更する必要はありません。(クラスに単一の注釈を追加するだけ)

  • そして最後に、気が変わった場合は、unlombokを実行するか、IDEにこれらのセッター、ゲッター、およびトラクターを作成させることができます(ポージョがどの程度明確になるかを確認したら、誰も要求しないと思います)。


10

Lombokに対する私の見方は、ボリラープレートJavaコードを作成するためのショートカットを提供するだけであるということです。
ボリラープレートJavaコードを記述するためのショートカットを使用することになると、私はIDEによって提供されるそのような機能に依存します-Eclipseのように、ゲッターとセッターを生成するためにメニューのソース>ゲッターとセッターの生成に移動できます。
私はこのためにロンボクのようなライブラリに依存しません:

  1. 代替構文の間接層でコードを汚染します(読み取り@Getter@Setterなどの注釈)。Javaの代替構文を学ぶのではなく、ネイティブにLombokのような構文を提供する他の言語に切り替えます。
  2. Lombokでは、コードを処理するためにLombok対応のIDEを使用する必要があります。この依存関係は、重要なプロジェクトにかなりのリスクをもたらします。オープンソースのLombokプロジェクトには、利用可能なさまざまなJava IDEのさまざまなバージョンのサポートを提供し続けるのに十分なリソースがありますか?
  3. オープンソースのLombokプロジェクトには、将来登場する新しいバージョンのJavaのサポートを提供し続けるのに十分なリソースがありますか?
  4. また、実行時にバイトコードで機能する、広く使用されているフレームワーク/ライブラリ(Spring、Hibernate、Jackson、JUnit、Mockitoなど)との互換性の問題がLombokによって発生する可能性があることにも不安を感じています。

全体として、私はJavaをLombokで「スパイスアップ」することを好みません。


これに対する反論の1つは、誰かがIDEを使用してPOJOのすべてのボイラープレートを構築したが、その後、getter / setterの1つが名前変更または削除された場合です。クラスは厳密なPOJOではなくなりましたが、これはクラスのすべてのメソッドを注意深く調べて推測する必要があります。ロンボクアノテーションは少なくともこれを回避し、私のクラスのビジネスロジックをより際立たせることがわかりました。ポイントはすべて有効です。しかし、この考えを提供したかっただけです。そしてロンボクは@ Data / @ Value / @ Utility / @ Builderでこれをさらに進めます
Adam Hughes

10

lombokを使用したかった@ToStringが、Intellij IDEAでのプロジェクトの再構築時にランダムコンパイルエラーが発生しました。インクリメンタルコンパイルが正常に完了する前に、コンパイルを数回ヒットする必要がありました。

jdk 1.6.0_39および1.6.0_45で、ロンボクプラグインなしでIntellij IDEA 12.1.6および13.0でロンボク1.12.2と0.9.3の両方を試しました。

生成されたメソッドをDelombokedソースから手動でコピーし、より良い時間までロンボクを保留にする必要がありました。

更新

この問題は、並列コンパイルが有効になっている場合にのみ発生します。

問題を提出しました:https : //github.com/rzwitserloot/lombok/issues/648

更新

mplushnikovは2016年1月30日についてコメントしました:

Intellijの新しいバージョンには、このような問題はもうありません。ここは閉鎖できると思います。

更新

可能であれば、Java + LombokからKotlinに切り替えることを強くお勧めします。ロンボクが回避しようとするすべてのJavaの問題が根本から解決されているためです。


6

LombokJackson CSVで問題が発生しました。オブジェクト(Java Bean)をCSVファイルにマーシャライズし、列が重複している場合、Lombokの@Dataアノテーションを削除し、マーシャライズが正常に機能しました。


2

私はそれをお勧めしません。以前はそれを使用していましたが、NetBeans 7.4で作業すると、コードがめちゃくちゃになりました。プロジェクト内のすべてのファイルからロンボクを削除する必要があります。Delombokがありますが、コードがねじ込まれないようにするにはどうすればよいですか。私はロンボクを削除して通常のJavaスタイルに戻すためだけに何日も費やさなければなりません。辛すぎる…


それでは、JavaBeansに注釈を付けるために何をお勧めしますか?
IgorGanapolsky 2015

ロンボクチームはコードを更新しました。それでも、準備ができるまでに数か月待たなければなりません
Harun

0

私はまだLombokの使用を試していません-リストの次にありますが、Java 8が重大な問題を引き起こしているかのように聞こえ、1週間前の時点で修正作業がまだ進行中です。そのソースはhttps://code.google.com/p/projectlombok/issues/detail?id=451です。



1
Java 8のロンボクには何の問題もありません
アレクセイ

私は何ヶ月もロンボクを使っていましたが、Java 8でうまく機能します。私が作業しているプロジェクトはすでに何年もロンボクを使用しており、これまでに問題は発生していません。
kevenlolo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.