同じファイルにプロジェクト名/グループ/バージョンと{source、target}の互換性を設定するにはどうすればよいですか?


82

私は自分のプロジェクトでgradleの使用を一般化するつもりであり、同じビルドファイルをどこでも再利用したいと思っています。残念ながら、移行を容易にするために、$ subjectに記載されているプロパティを1つのファイルで定義しようとすると問題が発生します。

これはgradle1.6です。

私が試したこと、すべての試みで失敗したこと:

  • gradle.properties:名前を変更できません(読み取り専用、を使用しsettings.gradleルートプロジェクト名をオーバーライドする必要があります!); {source,target}Compatibility考慮されていません。
  • settings.gradle{source,target}Compatibilityどちらも考慮されていません!

それで、これを達成するための正しい方法は何ですか?私がこれまでに試したことgradle.properties

group = something
name = whatever  # cannot do!
version = whatever
sourceCompatibility = whatever # not taken into account!

そしてでsettings.gradle

sourceCompatibility = "whatever";  # not taken into account!

編集まあ、「名前」の問題は解決できません。残りの部分については、ビルドファイルで適用する別のファイルを使用しました。「名前」の扱いは本当に正しくありません:/

編集2これは2014年でgradle1.12ですが、問題はまだ解決されていません...


1
参考までに、build.gradleファイルのプロジェクト名をカスタマイズできないことは現在改善要求です:issues.gradle.org//browse/GRADLE-2412
ライアンネルソン

回答:


125

gradle.properties:

theGroup=some.group
theName=someName
theVersion=1.0
theSourceCompatibility=1.6

settings.gradle:

rootProject.name = theName

build.gradle:

apply plugin: "java"

group = theGroup
version = theVersion
sourceCompatibility = theSourceCompatibility

では、ビルド間で再利用したいですか?あなたがすることができますapply from: "other.gradle"またはapply from: "http://my.server.com/other.gradle"。後者は現在キャッシュされていないことに注意してください。キャッシュを取得するには、バイナリプラグインを作成する必要があります。
Peter Niederwieser 2013年

はい、私はapply from:ソリューションを使用します。ただし、これでは名前の問題は解決されません:(
fge 2013年

1
最新のGradleでは、プラグインも適用できると思いますsettings.gradle。ただし、プラグインを使用してビルド間で同じプロジェクト名を設定するのは少し奇妙に思えます。
Peter Niederwieser 2013年

init.gradleユーザーホームからこれらすべてのプロパティを設定することも可能であることに注意してください(ユーザーガイドを参照)。
Peter Niederwieser 2013年

1
gradle.propertiesで変数を定義し、settings.gradleで使用する必要はありません。settings.gradle rootProject.name = "someName"で言及することができます。必ずsettings.gradleで二重引用符で囲んで指定してください。
Gopinath MR

22

私は同様の問題の解決策を見つけました。Gradle 1.11を使用しています(2014年4月現在)。プロジェクト名はsettings.gradle、次のようにファイル内で直接変更できます。

  rootProject.name='YourNewName'

これにより、正しいartifactIdを使用してリポジトリ(Artifactoryとそのプラグイン)へのアップロードが処理されます。


2
このソリューションは、マルチプロジェクトビルドには理想的とは言えません。
asandroq 2015年

@asandroq、設定ファイルは1つしかないため、そこからサブモジュールの名前を変更する必要があります。それは中心ですが、機能します。
snicolas 2017年

19

アーティファクトbaseNameを設定して、ビルドプロジェクト名から独立させます。これにより、必要なことを実現できます。

jar {
    baseName "core"
}

このプロパティを設定すると、プロジェクト名が「foo」であっても、を実行するgradle installと、アーティファクトが。coreではなく名前で公開されfooます。


1
プロジェクト名を使用する他のすべてのタスクには役立ちません。また、名前の衝突についてさらに混乱が生じる可能性があります...
Quartz

4

どうやらこれはこのsettings.gradleようなもので可能になるでしょう。

rootProject.name = 'someName'
gradle.rootProject {
    it.sourceCompatibility = '1.7'
}

最近、プロジェクトが利用可能になったときに後で呼び出されるクロージャを使用してプロジェクトプロパティを設定できるというアドバイスを受けました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.