0

私は、既存のプロジェクトの自動化された統合テスト用のいくつかの基本クラスを作成する任務を負っていましたが、プロジェクトの依存関係で問題が発生しました。

(抽象化された) プロジェクト レイアウトは次のとおりです。

project /
    MainProject
    Plugins /
        ...
    ConfigurationProject
    IntegrationTestProject

IntegrationTestProject は ConfigurationProject に依存しており、後者のレイアウトは次のとおりです。

ConfigurationProject/
    PluginConfigs/
        <plugin configuration files>
    <main configuration files>

特に、主要な構成ファイルはプロジェクトのルートにあります。それらをクラスパスに追加しようとして、プライマリ build.gradle には次のものがあります。

project('ConfigurationProject') {
    description = 'Configuration'
    sourceSets.main.resources.srcDir projectDir
}

Eclipse はルート内のすべてのファイルをプロジェクト リソースの一部として表示し、パッケージをすべて期待どおりに組み立てているため、これは問題ないように見えます。

ただし、実際に統合テストを実行すると、ConfigurationProject リソースがクラスパスにないように見えます。構成情報を取得できず、このスニペットからの出力に ConfigurationProject が存在しないことでさらに確認されます。

public void classpathScanner() {
    ClassLoader c=getClass().getClassLoader();
    System.out.println("c="+c);
    URLClassLoader u=(URLClassLoader)c;
    URL[] urls=u.getURLs();
    for (URL i : urls) {
        System.out.println("url: "+i);
    }
}

ConfigurationProject は、IntegrationTestProjects gradle.build を使用して IntegrationTestProject に含まれます。

dependencies {
    compile project(':ConfigurationProject')
}

プロジェクトのルートをリソースとして追加するときにのみこの問題を確認しました。プロジェクトのサブフォルダーをsourceSetsに追加するのは問題ないようです(このプロジェクトの他の場所で使用されています)。構成ファイルをサブフォルダーに移動することは私が検討したオプションであり、他に解決策が見つからない場合は実行しますが、この一連のアクションを含まないオプションがあるかどうかを確認したかった.

4

1 に答える 1

0

これに対する答えは、基本的に「プロジェクトのルートをリソース フォルダーにしないでください。Gradle はそれを嫌います。たとえそうしなかったとしても、とにかく悪い形です」構成ファイルをより賢明なリソース パスに配置することで、これを修正しました。

于 2014-12-05T15:44:37.270 に答える