2017-08-14 10 views
0

それぞれがGradleをビルドツールとして使用する一連のプロジェクトに取り組んでいます。これはマルチプロジェクトの設定ではありませんが、プロジェクトが関連しているため、各プロジェクトで共通のGradleスクリプトを使用して一貫性を持たせたいと考えています。プロジェクト間でグラデル定義を再利用する方法

たとえば、Javaコンポーネントの場合、生成されたJARファイル内のマニフェストファイルに同じ情報が必要です。特に、すべてのプロジェクトのメジャーバージョンとマイナーバージョンは同じで、パッチバージョンはプロジェクト固有です。私はからgradle hello jarを実行する場合、プロジェクト

apply from: 'master.gradle' 

patchVersion = 3 

task hello { 
    println 'Version: ' + majorVersion + '.' + minorVersion + '.' + patchVersion 
} 

の1のために - - プロジェクト

group 'com.example' 

ext.majorVersion = 2 
ext.minorVersion = 3 
ext.patchVersion = 0; // Projects to override 

def patchVersion() { 
    return patchVersion; 
} 

apply plugin: 'java' 

jar { 
    manifest { 
    attributes 'Bundle-Vendor': 'Example Company', 
     'Bundle-Description': 'Project ABC', 
     'Implementation-Title': project.name, 
     'Implementation-Version': majorVersion + '.' + minorVersion + '.' + patchVersion() 
    } 
} 

build.gradle間で共有されるように

master.gradleを:ここで

は、私がこれまで試したものですコマンドライン、私はタスクからVersion: 2.3.3を取得します。ただし、JARファイルマニフェストには2.3.0が含まれていますが、これは私が望むものではありません。マニフェストに正しいパッチのバージョンを取得するにはどうすればよいですか?さらに一般的には、どのようにしてプロジェクトがマスタースクリプトに情報を提供できるのでしょうか?

+0

あなたはプラグインとしてそれを構築する必要があります。 –

+0

少し詳細を教えてもらえますか?マスタースクリプトはプラグインですか?もしそうなら、関連するドコに指摘することができますか?ありがとう。 – dave

+0

https://docs.gradle.org/4.1/userguide/custom_plugins.htmlを参照してください。特に、「ビルドからの入力の取得」に関する節。 –

答えて

0

@Oliver Charlesworthの提案に基づいて、私は次のことを考え出しました。バージョン情報を保持して拡張オブジェクトとして使用する簡単なプラグインを作成しなければなりませんでした。注意してください(gradleファイルのコメントで示唆されているように)、項目が適用され、設定される順序は非常に重要です。順序が異なると、コンパイラのエラーや設定前の値が使用されます。

誰かが改善を提案したい場合は、そのようにしてください。

master.gradle

group 'com.example' 

// N.B. The individual project must have applied the semantic version 
// plugin and set the patch version before applying this file. 
// Otherwise the following will fail. 
// Specify the major and minor version numbers. 
project.semver.major = 2 
project.semver.minor = 3 
project.version = project.semver 

apply plugin: 'java' 

jar { 
    manifest { 
     attributes 'Bundle-Vendor': 'Example Company', 
      'Bundle-Description': project.description, 
      'Implementation-Title': project.name, 
      'Implementation-Version': project.semver 
    } 
} 

build.gradle

// Describe the project before importing the master gradle file 
project.description = 'Content Upload Assistant' 

// Specify the patch version 
apply plugin: SemanticVersionPlugin 
project.semver.patch = 3 

// Load the master gradle file in the context of the project and the semantic version 
apply from: 'master.gradle' 

単純なプラグインは以下の見つけることができます。現時点では、アプリケーションのソースコードがありますが、マスターのgradleファイルとともにライブラリに移動する必要があります。

buildSrc/src/main/groovy/SemanticVersionPlugin.groovy

import org.gradle.api.Plugin 
import org.gradle.api.Project 

class SemanticVersionPlugin implements Plugin<Project> { 
    void apply(Project project) { 
     project.extensions.create('semver', SemanticVersion) 
    } 
} 

class SemanticVersion { 
    int major 
    int minor 
    int patch 

    String toString() { 
     return major + '.' + minor + '.' + patch 
    } 
} 
関連する問題