2016-10-25 9 views
2

私は過去数日間、独自のgradleプラグインを作成していましたが(一部は学習用で、一部はレイアウトしているgraleビルドスクリプトをクリーンアップしています)、私は解決する方法を見つけられないという問題にぶつかってきました。私のプラグインjarにはme.alxandr.gradle.bintray.maven.MavenPackageという名前のインターフェイスがありますが、インポートしようとすると、見つからないというエラーが表示されます。これは本当に奇妙です。プラグインが明らかに実行されているからです(私はそれからの出力を見ていて、タスクは登録しています)。Gradle:ビルドスクリプトのスコープ内にプラグインクラスを取得できません

project.ext.MavenPackage = MavenPackage 

これだけで動作しbuildscriptにMavenPackage可能な名前になりますが、それは完全だ原因私はそれのために任意のエディタのサポートを失う:

現在、私は次のようにこれを回避するハックをやりました動的。私が(私のプラグインから)適用されたときにパッケージをインポートするためのbuildscriptを得ることができる方法はありますか?どのようにMavenPublicationが私にそれをインポートする必要がない範囲にあるように。そうでない場合、プラグインパッケージからクラスをインポートできないのはなぜですか?

ソースコード全体はhttps://github.com/Alxandr/gradle-utilsです。あなたはここで試してみることができます:https://github.com/Alxandr/gradle-utils/blob/master/gradle/publish.gradle#L1。現在のコードはそのまま動作します(上記で説明したハックを使用しています)。これを行うためのより良い方法を探しています。

答えて

0

あなたのGradleスクリプトでプラグインからクラスを使用するためには、buildscriptクラスパスにプラグインのJARを追加する必要があります。

はここでちょうどそれをする方法は次のとおりです。

buildscript { 
    repositories { /* where to get your plugin jar from, e.g. mavenLocal() */ } 
    dependencies { 
     classpath 'some_group:me.alxandr.plugin:1.0.0' 
    } 
} 
import me.alxandr.gradle.bintray.maven.MavenPackage 

あなたは、あなたがソートの書き込み、一種の間違っているのGradleユーザーガイドについてusing external dependencies in your build script

+0

まあでより多くの情報を見つけることができます。私の質問で説明したように、プラグインは明らかに実行中のどこかのクラスパスにあります。私は[ここ](https://discuss.gradle.org/t/unable-to-get-plugin-class-in-scope-in​​-build-script/20145)に各スクリプトには独自のクラスパスがあると言われましたがあなたが 'apply: 'somefile.gradle''を実行するとき)、それを*クラスパスに追加する必要があります。 – Alxandr

関連する問題