LombokのMavenスコープ(コンパイルと提供)
最近、lombok.jarが最終的なアーティファクトになりますが、これは必要ではないことがわかりました。私の理解では、ロンボクはコンパイル時のみです。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.4</version>
</dependency>
しかし、提供されたスコープに設定すると、ユニットテストで奇妙な動作が発生します。解決しようとすると、ClassNotFoundExceptionsでクラッシュします
Java.lang.NoClassDefFoundError: com/svv/esp/serviceimpl/dataimport/common/validation/LongValidator
一般的にロンボクに使用されるMavenスコープはどれですか?
MacOSX 10.9でOracle JDKビルド1.8.0_25-b17を使用しています
Lombokはprovided
スコープで使用する必要があります( official docs を参照)。
理由(コメントで述べられているように)は、lombokがコンパイル時のみのツールであることです。つまり、実行時ではまったく必要ありません。スコープをprovided
にすることで、コンパイラでロンボックライブラリを使用できるようになりますが、コンパイルされたjarの依存関係はnotです。そのため、最終的なjarはLombokに依存せず、デプロイメントに含める必要がないため、デプロイ可能ファイルの依存関係とサイズが削減されます。
通常、compile
。 provided
は、アプリケーションをホストするアプリケーションサーバーに通常同梱されているjar用です。最終的なアプリケーションでjarが必要ない場合は、jarではなくmavenプラグインを直接使用することをお勧めします。 http://awhitford.github.io/lombok.maven/lombok-maven- plugin/index.html
<optional/>
にはcompile
とtrue
を使用できます。
<scope>compile</scope>
<optional>true</optional>
Maven –オプションの依存関係と依存関係の除外 を参照してください。