私はGradleについて読んでいて、特に、ビルドプロセスに継承を導入できるようになっているため、非常に興味があります。たとえば、AmazonEC2インスタンスだけでなくGoogleAppEngineインスタンスにパッケージ化してデプロイできるJavaWebアプリがある場合、同じJava、XML、PROPERTIES、CSS、およびイメージファイルとパッケージを使用できる高度なビルドが必要です。 /それらを2つの大幅にパッケージ化されたファイルにデプロイしWAR
ます。
GAEアプリは、パッケージ化の方法に関して非常に具体的です。EC2(ほとんど)では、サーブレットの仕様に準拠している必要があります。GAEアプリは、SDKに付属update
のスクリプトからコマンドを実行することで「デプロイ」されます。appcfg.sh
EC2には、アプリをデプロイする独自の方法があります。重要なのは、これらは両方のPaaSプロバイダーにとって非常に異なるパッケージ化/展開プロセスであるということです。
public abstract class PackageTask {
// ...
}
// Package my Eclipse project for deployment to GAE.
public class AppEnginePackageTask extends PackageTask {
// ...
}
// Package my Eclipse project for deployment to EC2 instances.
public class AmazonPackageTask extends PackageTask {
// ...
}
public abstract class DeployTask {
// ...
}
// Deployment to GAE.
public class AppEngineDeployTask extends DeployTask {
// ...
}
// Deployment to EC2.
public class AmazonDeployTask extends DeployTask {
// ...
}
次に、myapp.gradle
タスクのビルド順序をテンプレート化するビルドファイルがある場合があります。
clean()
compile()
package()
deploy()
...そしてどういうわけか、GAEベースのビルドの/の代わりに/を構成/注入するか、AppEnginePackageTask
それらAppEngineDeployTask
のpackage()
テンプレート化されたタスクに/を構成/注入することができます。繰り返しになりますが、これを行う方法はわかりません(または、Gradleがこれを行うことができる場合でも)が、それが私が求めていることです。deploy()
AmazonPackageTask
AmazoneDeployTask
私の理解では、Gradleはこれを実行できます。Antは、このように機能する高度にモジュール化されたエレガントなビルドを強制することもできますが、XMLベースであるため、多少の調整が必要ですが、GroovyのようなOOPベースの言語はこれをよりクリーンでシンプルにします。
ただし、Gradleタスクのすべての例は、次の形式を取ります。
task package(dependsOn: 'compile') {
// ...
}
task deploy(dependsOn: 'package') {
// ...
}
だから私は尋ねます:これらは非OOPタスク定義のように見えます。Gradle(およびそのOOPの性質)についての私の理解は根本的に間違っていますか?ここで何が欠けていますか?これらの「構成可能/注入可能なビルドテンプレート」および継承ベースのタスクの概念をどのように実現できますか?前もって感謝します!
編集私はこの質問に「groovy
」のタグを付け直しました。GradleビルドスクリプトはGroovyDSLで記述されており、Groovyの第一人者(5倍速いと言う)でも、ほとんど知らなくてもチャイムを鳴らすことができるかもしれません。 Gradle。