問題タブ [gradle-plugin]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gradle - タスクによって動的に設定されたプロパティを Gradle 拡張機能に遅延評価させるにはどうすればよいですか?
私は Gradle を使用するのが初めてで、バージョン番号の管理に役立つプラグインを開発しようとしています。このプラグインは、project.version
適用先のプロジェクトのプロパティを設定するタスクを定義します。
私がやろうとしているのは、このプロパティがすべての Gradle ビルドの開始時に設定されるようにすることです。別のGradleの質問に対するPeterの回答を使用しgradle.startParameter.taskNames = [":setProjectVersionNumber"] + gradle.startParameter.taskNames
て、プラグインのapply
メソッド内に追加することで、タスクを他のタスクよりも先に実行することができました。
ただし、他のプラグイン (特に「Maven-publish」) は、構成フェーズで指定されているバージョンに依存しています。
私が知りたいのは、version
これらの拡張機能内のようなプロパティの評価を可能な限り遅延させる方法があるかどうかです。この場合、それらに依存するタスクが呼び出されるまで評価されません。かもしれません:publishToMavenLocal
。
以下は、私が達成したいことを示す SSCCE です。
ext.version
上記の例で同等にする方法を提供できれば1.2.3
、私の問題は解決したと思います。
これがあまりにも多くのことを要求している場合は、実行時ではなく構成時にプラグインにバージョン文字列を生成させることができるかもしれません。でも、このようにできるかどうかを知っておくといいでしょう。
編集
実験的なブランチで、すべてのバージョン文字列の割り当てロジックを構成フェーズに移動しようとしました (タスクの実行中ではなく、プラグインの適用中にすべてを実行することによって) が、プラグインの拡張機能が機能していないため、これが機能するとは考えていません。まだ処理されていないため、その中で定義されたプロパティを参照しようとすると失敗します。
編集2
バージョン文字列の割り当てロジックをproject.afterEvaluate
クロージャーでラップすると、うまくいったようです。
モック プロジェクトでは、次のように実装build.gradle
します。
何らかの理由で、これはうまくいくようです。バージョン文字列の割り当てロジックは 'afterEvaluate' クロージャーでラップされ、テスト パブリケーションのバージョン割り当てはそうではありませんが、前者は後者の前に発生します。
当初の意図どおりにできるかどうか知りたいので、この質問は未解決のままにしておきます。さらに、プロジェクト バージョンが設定された後にパブリケーション バージョンが割り当てられる理由と、それが常に当てはまるのか、それとも偶然に起こっているのかについて、説明をいただければ幸いです。
groovy - 特定のサブプロジェクトでのみ Gradle ShadowJar プラグインを実行する
注:私myapp-server
はDropWizard アプリですが、これは厳密にはGradleに関する質問です。適切な測定のために、DropWizard についてのみ言及します。
Gradle でビルドしているマルチプロジェクト ビルドがあります。
次settings.gradle
のようになります。
Gradle で Groovy ソース コードをコンパイルし、単体テストを実行し、GroovyDocs を生成し、3 つのサブプロジェクトすべてのバイナリ JAR とソース JAR の両方をパッケージ化することに成功しました。ビルドの呼び出し: gradle clean build groovydoc sourcesJar -Pversion=<whatever version I specify>
.
myapp-server
実際には、Shadow JAR プラグインを実行する必要があるプロジェクトであり、通常はを介して実行されgradle clean build shadowJar
ます。
これが私のものmyapp-server/build.gradle
です:
私の質問:サブプロジェクトでのみタスクを実行し、他のプロジェクトでは実行しないように Gradle を構成するにはどうすればよいですか? shadowJar
myapp-server
理想的には、ビルド呼び出しを次のようにすることができます。
そして、どういうわけか、Gradle を除くshadowJar
すべての実行を無視するように構成します。アイデア? myapp-server
アップデート
実行するgradle clean build groovyDoc sourceJar shadowJar -Pversion=0.1.3
と、次で終わる一連の Gradle 出力が表示されます。
ただし、ドリルダウンしmyapp-server/build/libs/myapp-server-0.1.3.jar
て開くと (ZIP のように抽出します)、コンパイルされたクラスのみが表示され、依存するすべての JAR のすべてのクラスは表示されません (「Fat JAR」である必要があります)。たとえば、myapp-server
DropWizard に依存します。すべての DropWizard クラスは、この JAR 内にある必要があります。DropWizard のすべての推移的な依存関係には、この JAR 内にクラス ファイルが含まれている必要があります。
groovy - 単一の Gradle ビルド呼び出しから実行可能な JAR をパッケージ化して実行しますか?
これが私のGroovyアプリのドライバークラスです:
次のことができるように、Gradle ビルドを拡張しようとしています。
- 実行可能 JAR に Gradle パッケージを追加します。と
- 実行可能な JAR を実行し、コマンド ライン引数をそのメイン メソッドに渡します
理想的には、次の方法でアプリを簡単に実行できます。
次のコンソール出力を参照してください。
これが私のものbuild.gradle
です:
Gradle パッケージ + このようにアプリを実行できるようにするには、どうすればよいですか?
java - Java Gradle API の Maven 依存関係パラメーターは何ですか?
私はJavaでGradleプラグインを書いています。開発 (特にコード補完) に IDE を使用するには、クラスpom.xml
の依存情報をプロジェクトのファイルに追加する必要があります。org.gradle.api.*
どこで見つけることができますか?
mvnrepository.comを試しましたが、見つかりませんでした。
gradle - gradle プロジェクト ディレクトリから jacoco exec ファイルを作成する
exec
カスタムgradleプラグインから、jacocoファイルの場所をプロジェクトディレクトリの外に変更するにはどうすればよいですか。プラグインに以下のコードがあります:
しかし、テストを実行すると、.exec
ファイルは次の場所に生成されます<projectDir>/jacoco/<taskName>.exec
destinationFile
ディレクトリの値を変更すると、build.gradle
完全に正常に動作します。
ここで何が欠けていますか?
編集:プラグインの完全なコードはこちら
java - Gradle で Android アプリをビルドするときの OutOfMemoryError
ジェンキンスでAndroidアプリを構築しようとしています。ほとんど同じ構成のかなりの VM があります (少なくとも RAM の量は同じです) が、そのうちの 1 つがこれを返しています:
さて、この dx ビルド ツールに 1GB 以上を提供する必要があると思いますが、どうすればそれを行うことができますか? -Xmx
オプションをGradleに渡して代わりに使用するにはどうすればよい-JXmx1g
ですか?
gradle - コピー タスクを依存関係として既存の Gradle タスクに追加する
次のディレクトリ構造を持つ Groovy アプリがあります。
現在、実行するとgradle clean build shadowJar
(ShadowJar プラグインを使用します が、ここでは関係ないと思います)、コンパイル済みの実行可能 JAR が の中にありbuild/distributions
ます。理想的には、ビルドの呼び出しを変更することなく、src/main/resources/config.json
ファイルをこの場所にコピーするタスクを Gradle ファイルに追加したいと考えています。build/distributions
私はこれを試しました:
ただし、これにより、次のビルド呼び出しを使用する必要があります: gradle clean build shadowJar copyJson
、これは私が望むものではありません。
だから私は尋ねます:どのように私のGradleビルドにタスクを追加してgradle clean build shadowJar
、実行すると実行可能なJARが下に生成されるだけでなく、その場所にもファイルbuild/distributions
がコピーされるようにするにはどうすればよいですか?src/main/resources/config.json
android - Gradle プラグインを使用して android.defaultConfig に関数を追加するには?
Android Gradle プラグインに機能を追加する Gradle プラグインを作成したいと考えています。getGreeting
ここで概説されているような機能を追加したいのですandroid.defaultConfig
が、プラグインを介して:
Groovy プロジェクト全般の準備を開始しました。今、私はこの時点にいます:
Groovy を使用したことがないので、クラスにデバッグする方法さえ知りません。android.defaultConfig
コメント行は、ブロックにアクセスする方法である可能性があります。そこに機能を追加するにはどうすればよいですか?