1

私は最初の Gradle プラグインの機能を反復してきました。私は早い段階で commons-io が必要だと判断したので、最新バージョンである commons-io 2.4 への依存関係を追加しました。

コマンド ラインからビルドが機能し、Eclipse でエラーが発生することはなく、これはしばらくの間順調に進んでいます。

「FileUtils.write(File,String)」を使用するコードを統合しようとし始めました。以前はその方法は必要ありませんでした。Eclipse ですべての赤字を取り除いてから、コマンド ライン ビルドを試しました。

これは、次のようなエラーで失敗しました。

    ... error: cannot find symbol
                FileUtils.write(serviceLoaderFile,
                         ^
  symbol:   method write(File,String)
  location: class FileUtils

これは私を混乱させました。Eclipse で失敗した行に行きましたが、問題は示されませんでした。「write()」メソッドに移動しましたが、問題ないように見えました。次に、「--debug」を指定してコマンドライン ビルドを実行し、手がかりを得ました。

「javac」行を見つけたとき、「$GRADLE_HOME\lib\commons-io-1.4.jar」(「GRADLE_HOME」はちょうど私の Gradle 2.3 ディストリビューションです) が依存関係の jar の前にクラスパスにあることがわかりました。次に、1.4 jar のコードを調べたところ、そのバージョンの「FileUtils」クラスには「書き込み」メソッドがないことがわかりました。

これについて私は何をすべきですか?

更新

私の「依存関係」ブロックが役立つ可能性が高いと思います。これは次のとおりです。

dependencies {
  compile ("org.codehaus.groovy:groovy-all:2.3.9")
  compile gradleApi()
  compile "org.opendaylight.yangtools:yang-parser-impl:0.7.0-SNAPSHOT"
  compile "org.opendaylight.yangtools:binding-java-api-generator:0.7.0-SNAPSHOT"
  compile "org.opendaylight.yangtools:binding-generator-api:0.7.0-SNAPSHOT"
  compile "org.opendaylight.yangtools:binding-generator-impl:0.7.0-SNAPSHOT"
  compile "org.opendaylight.controller:yang-jmx-generator:0.3.0-SNAPSHOT"
  compile "commons-io:commons-io:2.4"

  testCompile("org.spockframework:spock-core:1.0-groovy-2.3") {
    exclude group: "org.codehaus.groovy"
  }

「gradleApi」参照をコメントアウトしようとしましたが、効果はありませんでした。また、「groovy-all」参照に関連付けられた commons-io の「除外」を追加しようとしましたが、それでも違いはないようです。}

4

2 に答える 2

1

おそらくブロックのgradleApi()下に追加しました-ドキュメントを参照してください。問題は、バージョン1.4を含め、gradle が必要とするすべての依存関係が同梱されていることです。以下の抜粋を参照してください。dependencies {}commons-io

[opal@opal-mac-2]~/.gvm/gradle/current/lib % pwd
/Users/opal/.gvm/gradle/current/lib
[opal@opal-mac-2]~/.gvm/gradle/current/lib % ll commons-io-1.4.jar 
-rw-rw-r--  1 opal  staff  109043 23 gru 13:17 commons-io-1.4.jar
[opal@opal-mac-2]~/.gvm/gradle/current/lib % 

おそらくバージョン2.4を個別に追加したため、競合が発生しました。実行することもできます

gradle dependencies

完全な依存関係ツリーを表示し、問題を確認します。

から推移的な依存関係を除外する可能性はありませんgradleApi()

于 2015-03-31T20:20:40.843 に答える
0

これを解決するには、次のブロックを「sourceSets」ブロックに追加する必要がありました。

main {
    compileClasspath = configurations.compile.minus files("$gradle.gradleHomeDir/lib/commons-io-1.4.jar")
}

これは非常に単純ですが、これに対するよりクリーンなソリューションがあればいいのにと思います。それがどのように見えるかわかりません。

于 2015-04-02T14:13:17.587 に答える