2017-08-31 15 views
0

私のプロジェクトに共有グラデルファイルを適用したいsettings.gradle共有ファイルはjarにあり、設定フェーズでダウンロードして抽出する必要があります。これは、設定フェーズで適用する必要があるプラグインが適用されるためです。私はこの関連する質問を見つけました:How to share a common build.gradle via a repository?私の好みの方法は、この答えに記載されています:https://stackoverflow.com/a/39228611/987860設定時にsettings.gradleでantを使用

しかし、これはbuild.gradleでのみ動作しているようです。 buildscriptブロックをsettings.gradleに移動しようとしました。

settings.gradle

buildscript { 

    ext { 
     dependencyVersion = '0.1.2' 
    } 

    repositories { 
     maven { 
      credentials { 
       username 'user' 
       password 'password' 
      } 
      url 'https://my-private-maven-repo.com' 
     } 
    } 
    dependencies { 
     classpath "my.group:myartifact:$dependencyVersion" 
    } 
    dependencies { 
     def gradleScripts = new File(rootDir, '/build/gradle') 
     delete gradleScripts 
     def jars = configurations.classpath.files as List<File> 
     ant.unjar(src: jars.find { it.name.matches '.*myartifact.*' }, dest: gradleScripts) { 
      patternset { 
       include(name:'*.gradle') 
      } 
     } 
    } 
} 

apply from: new File(rootDir, '/build/gradle/myscript.gradle') 

しかし、これは、次の例外が発生:

FAILURE: Build failed with an exception. 

* Where: 
Settings file 'settings.gradle' line: 24 

* What went wrong: 
A problem occurred evaluating settings 'journal'. 
> Could not get unknown property 'ant' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

BUILD FAILED 

Total time: 0.019 secs 
Could not get unknown property 'ant' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. 

は私settings.gradleが評価される前にconfiuration段階int型antを利用する方法はありますか?ダウンロードするファイルが適用される前に依存関係をダウンロードして抽出する必要があります。

答えて

0

これは本当に珍しいことです。私は実際にあなたがしなければならないよりもゆっくりとあなたのビルドを行うので、あなたがやろうとしていることをしないことをお勧めします。 build/gradleを削除し、すべてのビルドでプラグインのjarの内容を抽出しています。

build.gradle(またはsettings.gradle)のすべてをプラグインに入れてその方法で配布することができます。あなたはすでにダウンロードが必要なジャーを持っているので、myscript.gradleをプラグインに変換するのは、大まかに変換するのが簡単です。

すでにプラグインのjarファイルを生成だプロジェクトでsrc/main/groovy/some/package/MyPlugin.groovyでこれを入れて:settings.gradleに適用されるプラグインの

package some.package 

import org.gradle.api.* 

class MyPlugin implements Plugin<Project> { 
    void apply(Project project) { 
     project.with { 
     // contents of script 
     } 
    } 
} 

package some.package 

import org.gradle.api.* 

class MyPlugin implements Plugin<Settings> { 
    void apply(Settings settings) { 
     settings.with { 
     // contents of script 
     } 
    } 
} 

を次に、あなただけのプラグインとの使用に依存関係を追加することができますapply plugin: some.package.MyPlugin

この方法でプラグインを開発/配布することには、他にも多くの利点があります。プラグイン開発の詳細については、Gradle Guidesをご覧ください。

また、別の.gradleスクリプトを絶対に保存する必要がある場合は、あなたは(瓶の外に)別にそれを提供することができれば、あなたが行うことができます:

apply from: "http://example.com/some/url/myscript.gradle"

これに欠点は、(これはGradleの4.2に固定されている)、それはすべてのビルドにファイルをダウンロードしましょうということです。

+0

ありがとうございます、私はビルド時間の大幅な増加に気付きませんでした。だから、ダウンロードしてjarファイルを解凍することは大きな問題ではなく、すべてのビルドで実行されるかどうかは気にしません。私のスクリプトがしているのは、公式のgradleプラグインレポからプラグインを適用するだけですが、私はすべてのプロジェクトにコンテンツをコピー/ペーストしたくありません。ダウンロードしたファイルをunjar'ingする方法がない限り、そのまま維持したいと思います。公開されているURLから設定を適用することは、最後ではあるが実行可能なオプションかもしれない。 – Ben

関連する問題