3

Buildship プラグインで Gradle と Eclipse を使用しています。

Buildship は、.classpathEclipse が使用するファイルを作成します。クラスローディングの理由から、エントリの後に1 つのクラスパス エントリ ( com.gwtplugins.gwt.eclipse.core.GWT_CONTAINER) を表示する必要があります。org.eclipse.buildship.core.gradleclasspathcontainer

したがって、ファイルの関連部分は次の.classpathようになります (GWT_CONTAINER下部に があります)。

<classpath>
 <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
 <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer" />
 <classpathentry kind="con" path="com.gwtplugins.gwt.eclipse.core.GWT_CONTAINER"/>
</classpath>

Buildship は常にgradleclasspathcontainer最後の位置にあります。build.gradleだから私は私の(抜粋)でこのようにソートを変更しようとしました:

eclipse {
    classpath { 
        file {
            beforeMerged { classpath ->
                def gwtClasspath = classpath.entries.find { entry -> entry.path == 'com.gwtplugins.gwt.eclipse.core.GWT_CONTAINER' }
                classpath.entries.remove gwtClasspath
                classpath.entries << gwtClasspath
            }
        }
    }

を使用する./gradlew eclipseClasspathと、.classpathファイルが正しく作成されます。しかし、Buildship が実行されるとすぐに、ファイルは間違った順序で再び上書きされます。

whenMergedの代わりに も使用してみましbeforeMergedたが、何も変わりません。

Buildship で起動したときの Gradle の出力は次のとおりです (たとえば、Eclipse プロジェクトのプロパティで [Gradle] -> [更新] をクリックします)。

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.5/userguide/command_line_interface.html#sec:command_line_warnings

CONFIGURE SUCCESSFUL in 0s
:cleanEclipseWtpComponent
:cleanEclipseWtpFacet
:cleanEclipseWtp
:eclipseWtpComponent
:eclipseWtpFacet
:eclipseWtp

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.5/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 0s
4 actionable tasks: 4 executed

Buildship はタスクを実行することすらしていないようですが、他の方法でファイルをeclipseClasspath作成しています。.classpath

クラスパスを自分のやり方でソートしたいという私の願いを尊重するようにBuildshipを取得するにはどうすればよいですか?

4

2 に答える 2

2

Gradleフォーラムで解決策を見つけました:

Buildship はタスクを使用しませんeclipseClasspathが、構成を読み取り、.classpath独自の手段で作成します。Gradle クラスパスがまだ定義されていない場合は、クラスパスの末尾に追加されます。これは、whenMergedセクションの実行後に発生します。したがって、解決策は、Gradle クラスパスを手動で追加することです。

eclipse {
   classpath {
        containers 'org.eclipse.buildship.core.gradleclasspathcontainer'
   }
}
于 2018-03-19T17:55:54.523 に答える