現在、プロジェクトをantからgradleに移行しています。すべて問題ありませんが、1 つだけ問題があります。現在、レポで git コマンドを実行して最新の xy-release タグを読み取り、バージョン番号を取得するためのカスタム ant-contrib ベースのタスクがあります (およびプロジェクトのような生成された jar ファイル名のバージョンを取得します) xy.jar)。ご覧のとおり、これにはプラグインが必要です。悲しいことに、利用可能なプラグインを調べても、実際には何も役に立ちません (いくつかの git 関連のプラグインは存在しますが、それらの目標は、リリースを作成するなどの別の目的であるため、既に作成されたタグを読み取るのではなく、リポジトリにタグを付けます)。だから私は私の目標を達成するために助けが必要です. Gradle ですべてを発明する必要がありますか? 既存の ant ビルド ファイルをインポートできることはわかっていますが、実際にはインポートしたくありません。
質問する
1230 次
3 に答える
2
さて、Gradle で同じ古いものを実装しようとしました。(アリ/ツタから逃げているので、古いものを保持したくないため)。これが出力です(私はGradleとGroovyが初めてなので、不自由かもしれません)。できます。
jar {
dependsOn configurations.runtime
// get the version
doFirst {
new ByteArrayOutputStream().withStream { execOS ->
def result = exec {
executable = 'git'
args = [ 'describe', '--tags', '--match', '[0-9]*-release', '--dirty=-dirty' ]
standardOutput = execOS
}
// calculate version information
def buildVersion = execOS.toString().trim().replaceAll("-release", "")
def buildVersionMajor = buildVersion.replaceAll("^(\\d+).*\$", "\$1")
def buildVersionMinor = buildVersion.replaceAll("^\\d+\\.(\\d+).*\$", "\$1")
def buildVersionRev = buildVersion.replaceAll("^\\d+\\.\\d+\\.(\\d+).*\$", "\$1")
def buildTag = buildVersion.replaceAll("^[^-]*-(.*)\$", "\$1").replaceAll("^(.*)-dirty\$", "\$1")
def dirty = buildVersion.endsWith("dirty")
println("Version: " + buildVersion)
println("Major: " + buildVersionMajor)
println("Minor: " + buildVersionMinor)
println("Revision: " + buildVersionRev)
println("Tag: " + buildTag)
println("Dirty: " + dirty)
// name the jar file
version buildVersion
}
}
// include dependencies into jar
def classpath = configurations.runtime.collect { it.directory ? it : zipTree(it) }
from (classpath) {
exclude 'META-INF/**'
}
// manifest definition
manifest {
attributes(
'Main-Class': 'your.fancy.MainClass'
)
}
}
于 2012-09-27T13:06:35.593 に答える
1
または、既存の Ant タスクを再利用します。Ant ビルドをインポートする必要はありません。
于 2012-09-26T15:20:36.460 に答える
0
git にはこのためのコマンドがあるのでgit describe
、それはかなり簡単なはずです。git を呼び出して、出力を読み取るだけです。最後の *-release タグだけを取得するには、正確なコマンドは次のとおりです。
git describe --abbrev=0 --match=*-release
(正規表現かグロブかはわかりません。正規表現の場合は が必要です.*-release
)。--tags
リリース タグに注釈が付けられていない場合に追加します。
于 2012-09-26T14:18:11.890 に答える