0

最初に、少し背景を説明します。

Eclipse Java Web プロジェクトを Gradle に変換する作業を行っています。Vaadin フレームワークを使用し、現在 Ant/Maven/Ivy でプロジェクトを管理しています。Web プロジェクトが依存する共通コードを含む別のプロジェクトがあります。どちらのプロジェクトでも、ライブラリ ファイル (JAR) はソースに含まれているだけで、VCS にコミットされています。Gradle への切り替えにより、リポジトリから依存関係を取得するための推奨される方法を使用します。主にMaven Central。

現在の Ant ビルド スクリプトに対応する Gradle ビルド スクリプトの作成が完了しました。プロジェクトごとに 1 つの Gradle ビルド スクリプトがあり、設定ファイルと共に構成インジェクション用にルートに 1 つあります。私は両方のプロジェクトにJavaEclipseプラグインを使用し、さらにWeb プロジェクトにはwarvaadinプラグインを使用しています。

今問題に。Gradle を使用して WAR を構築すると、完全に機能し、WEB-INF/libディレクトリには、依存関係の構成に基づいて、期待する JAR のみが含まれます。ただし、Eclipse 内で Tomcat を使用してプロジェクトを公開すると、 WEB-INF/libディレクトリに多数の追加の JAR が作成されます。ほとんどの JAR は無害で必要のないものであるため、WAR から除外しましたが、Tomcat に既に含まれているために実際に問題のあるものもいくつかあります。あるケースでは、JAR を無視するだけで、次の通常のメッセージが表示されます。

[Tomcat] validateJarFile(*) - jar がロードされていません。

他のケースでは、アプリケーションが正しく動作しているように見えても、実際にはコンソールで例外を受け取ります。また、 testCompile構成に関連付けられているすべての依存関係も公開されていることに気付きましたが、これは正しくないようです。

問題のある正確な JAR はtomcat-jdbcservlet-api-2.5です。共通コードをコンパイルするには、tomcat-jdbc JAR が必要ですservlet-api-2.5 JAR は、実際にはvaadin-client-compilerの単なる推移的な依存関係です。Web プロジェクトでvaadin-client-compilerの依存関係を削除しました。これは必要ないように思われるためですが、Gradle のvaadinプラグインの構成によってまだ取り込まれているようです。ただし、どちらの場合も、 warプラグインのprovidedCompile構成を使用して、それらを WAR から除外しています。

私の質問は、Tomcat/Eclipse がこれらの JAR を公開しないようにするにはどうすればよいですか? Gradle と Tomcat/Eclipse はどのように通信しますか? 私が収集できることから、Gradle と Tomcat/Eclipse は、 GradleのEclipseプラグインが変更する.classpathを介して間接的にのみ通信しているようです。また、Gradle のeclipse-wtpプラグインも試しました。問題のある JAR がまだコピーされていたため、問題は解決していないように見えました。このプラグインを使用する必要があるのか​​ 、それとも単純にEclipseプラグインを使用できるのかさえ、実際にはわかりません.

また、 Eclipse MarketplaceからGradle Integration for Eclipseの「プラグイン」をインストールしたことも付け加えておく必要があります。そこで、追加する [構成] -> [Gradle プロジェクトに変換] オプションと、それが提供する[Gradle] -> [依存関係を更新]機能を使用しました。それ以外は、少しバグがあることがわかったので、ほとんどの場合、コマンド ラインから Gradle を実行しています。

以下は、私のマシンでgradle -vを実行した場合の出力です。

------------------------------------------------------------
Gradle 1.10
------------------------------------------------------------
Build time:   2013-12-17 09:28:15 UTC
Build number: none
Revision:     36ced393628875ff15575fa03d16c1349ffe8bb6
Groovy:       1.8.6
Ant:          Apache Ant(TM) version 1.9.2 compiled on July 8 2013
Ivy:          2.2.0
JVM:          1.8.0_05 (Oracle Corporation 25.5-b02)
OS:           Mac OS X 10.9.3 x86_64

追加の説明が必要な場合はお知らせください。確かに私のシナリオは非常に一般的であるため、何か間違ったことをしている、または構成が欠落しているに違いないと思います。多くの開発者は Eclipse 内で Tomcat を使用して Web アプリケーションをローカルでテストしていますが、Gradle の人気により、以前にこれに遭遇したことがない人がいたら驚くでしょう。Tomcat/Eclipse に関する限り、Gradle への切り替えによる主な違いは、依存関係がソースに直接リンクされるのではなく、リポジトリから読み込まれるようになったことです。

どんな助けでも大歓迎です。

4

1 に答える 1

2

ただし、Eclipse 内で Tomcat を使用してプロジェクトを公開すると、WEB-INF/lib ディレクトリに多数の追加の JAR が作成されます。ほとんどの JAR は無害で必要のないものであるため、WAR から除外しましたが、Tomcat に既に含まれているために実際に問題のあるものもいくつかあります。

これは、gradle eclipse ツールの既知の問題です。問題は、「提供された」スコープを持つ依存関係について理解していないことです。詳細については、この問題を参照してください: https://issuetracker.springsource.com/browse/STS-2380

この問題には回避策があります。「問題を引き起こす」いくつかの一般的な依存関係は、設定で指定した正規表現のリストを介してグローバルに除外できます。メニュー「ウィンドウ >> 設定 >> Gradle >> WTP」を開きます。ここで、'配置アセンブリ' から jar を除外するために使用される正規表現を追加できます。

于 2014-06-10T15:39:53.960 に答える