2016-02-09 17 views
19

コンパイルして期待通りに動作するGradleプラグインがあります。私はGradleプラグインを使ったサンプルアプリケーションをソースコードとともに配布したいと思います。これはプラグインの変更を簡単にテストすることもできます。これを行うには、ブロックパスにクラスパスの依存関係を追加する必要があります。サンプルプロジェクトでコンパイルされる依存ローカルプラグインを追加することは可能ですか?私が今直面している主な問題は、サンプルプロジェクトを同期しようとしたときにプラグインが存在しないということです。ローカルプラグインをGradleプロジェクトに追加

+0

プラグインの使い方を示すサンプルプロジェクトの場合、またはプラグインの統合テストの一種ですか?それが前者の場合は、jcenterまたはgradle plugins portal repoのプラグインに依存しないのはなぜですか?なぜそれはローカルのプラグインプロジェクトに依存しなければならないのですか? – RaGe

+0

統合テストの場合は、実際には[ProjectBuilder](https://docs.gradle.org/current/javadoc/org/gradle/testfixtures/ProjectBuilder.html)の方法にする必要があります – RaGe

+0

ちょうど統合テスト、それは私が達成しようとしている最終的なものです。私はこのProjectBuilderをチェックアウトし、それがどのように行くのかを報告します、ありがとう。 – Bobbake4

答えて

6

統合テストの作成が最終的な目標である場合は、引き続きProjectBuilderを使用することをお勧めします。この例はSection 39.5.4 hereにあります。グラデルソースには、実際のテスト実装の例がたくさんあります。 See here for instance


言われているように、私はあなたが掲示した文字通りの質問について興味があり、いくつか試しました。クラス名はその文字列を作るために'引用符'で囲まれていないことを

buildscript{ 
    repositories{ 
     ... 
    } 

    dependencies{ 
     classpath files('relative/path/to/plugin.jar') 
    } 
} 

apply plugin: fully.qualified.package.PluginClassName 

注:どのような私のために仕事をしたことはこれです。

この宣言では、プラグインを使用するプロジェクトがビルドされる前にplugin.jarをビルドして使用する必要がありますが、これはあまり有用ではありませんが、この時点では外部リポジトリの依存関係にもなる可能性があります。

これの第2の問題は、プラグインプロジェクトの推移的な依存関係がプラグインコンシューマプロジェクトに自動的に追加されないことです。

classpath project(':plugin-project')のようなプロジェクト依存関係をビルドスクリプト内で処理することができませんでした。プラグインのプロジェクトは、プラグイン・消費者のプロジェクトを構築しながら構築し、利用可能常にであることを確実にする


ワン(非常にハック)の方法は、常に構築する前に最初のプラグインを構築する「親」build.gradleを持つことです消費者プロジェクト。 I uploaded an example here

1

現在のGradleバージョン(執筆時点で3.3)では、コンポジットビルド機能を使用してプラグインの依存関係を置き換えることができます。

たとえば、あなたは(あなたの例のプロジェクトのルートで実行)以下のコマンドを使用してサンプルプロジェクトをビルドすることができます。 gradle build --include-build /path/to/local-plugin

これは、ローカルディレクトリからプラグインを拾うでしょう。それはあなたのプラグインを最初にビルドし、次にビルドされたプラグインを依存関係としてサンプルプロジェクトをビルドします。

この機能はまたのIDEでサポートされています。プラグインを代入するだけのプラグインのブロックをbuildscriptブロックで動作しますが、いないことをhttps://docs.gradle.org/current/userguide/composite_builds.html

お知らせ: Simple instructions for configuring Composite Build in IntelliJ

はこちらのドキュメントを参照してください。

5

私はgradle pluginをAndroidスタジオでデバッグしたいときに、私はそれを最後に解決します。

まず、gradle pluginをローカルのmavenにアップロードします。

apply plugin: 'java' 
apply plugin: 'groovy' 
apply plugin: 'maven' 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile gradleApi() 
} 

sourceCompatibility = "1.7" 
targetCompatibility = "1.7" 


group='com.egos.gradle.plugins' 
name='plugintest' 
version='0.0.1' 

uploadArchives { 
    repositories { 
     mavenDeployer { 
      repository(url: uri('../repo')) 
     } 
    } 
} 

gradle uploadArchivesを実行します。次に、ローカルプラグインを使用します。

buildscript { 
    repositories { 
     maven { 
      url uri('../repo') 
     } 
    } 
    dependencies { 
     classpath group: 'com.egos.gradle.plugins', 
        name: 'plugintest', 
        version: '0.0.1' 
    } 
} 

apply plugin: 'com.egos' 
1

上記の回答に追加してください。これに代えて

gradlePlugin { 
    plugins { 
     testgen { 
      id = "com.egos.gradle.plugins" 
      implementationClass = "com.egos.gradle.plugins.<PluginClassName>" 
     } 
    } 
} 

プラグインのクラス名を設定します。また、「uploadArchives」以下のようなものが一緒に「gradlePlugin」を追加する必要があります。 上記の回答と同じままです。ありがとう!

関連する問題