2016-07-13 10 views
0

Info:Windows 7でGradle 2.14を使用して、Javaマルチプロジェクトを構築する。Gradle for Jenkinsの条件付き依存関係を使用する最良の方法

自分のマシンにビルドするときに、私のマシン上でライブラリ/サブプロジェクトを使いたいと思っています。 ジェンキンスはプロジェクトを構築するときに、自分のリポジトリからライブラリ/サブプロジェクトを使用しなければなりません。

私は私のIFステートメントのためだけに存在する "JenkinsTask"を作った。これはすでに私が望むようにほとんど機能しています。ここに私のルートのプロジェクトのGradleスクリプトからのコードは:私のマシン上で

task JenkinsTask() { 
//doing nothing 
} 

def ProjectB_Version //defined on command line 

gradle.taskGraph.whenReady {taskGraph -> 
if (taskGraph.hasTask(JenkinsTask)) { 
    println "Archiva dependency" 
      dependencies { 
      compile group: 'Lib_ProjectB', name: 'ProjectB', version: ProjectB_Version 
    } 
} 
else { 
    println "Filesystem dependency" 
      dependencies { 
      compile fileTree(dir: 'ProjectB\\build\\libs', includes: ['*.jar']) 
    }  
} 
} 
compileJava.dependsOn ":ProjectB:build" 

私はちょうど私がgradle :build jenkinstask -x :ProjectB:build -PProjectB_Version=0.5

実行ジェンキンスでgradle build -PProjectB_Version=0.5

を実行して今すぐ質問である「Gradleの」方法には、存在する場合これを行う?ですから、if/else文は必要なく、おそらく "-x"パラメタJenkinsコマンドラインを放棄することもできます。特に "Jenkinstask"はハックのように感じます。

ありがとうございます。

答えて

2

私はそれがグラデルウェイと見なされているかどうかはわかりませんが、誰がプロジェクトをビルドしているかにかかわらず、同じ方法で依存関係を宣言しなければならないと思います。 は、代わりに私は、あなたがすべきだと思う:

  1. は、ビルド環境に応じて、代わりに、タスク実行グラフにタスクをチェックするコマンドライン引数に
  2. ベースの決定をアーティファクトリポジトリを定義します。

この方法では、プロジェクトの自動pom生成をローカルに行うこともできます。なぜなら、そのグラデルルはアーティファクトグループと名前を知る必要があるからです。そして、ビルドスクリプトは私の意見ではっきりと見えるでしょう。

if (project.hasProperty('jenkins')) { 
    repositories { 
     maven { 
      url "${jenkinsRepoUrl}" 
     } 
    } 
} else { 
    repositories { 
     mavenLocal() 
     mavenCentral() 
    } 
} 

dependencies { 
    compile (
     ['commons-lang:commons-lang:2.4'], 
     ["Lib_ProjectB:ProjectB:${ProjectB_Version}"], 
    } 
} 

を、ローカルgradle clean build -PProjectB_Version=0.5としてビルドを実行し、gradle clean build -Pjenkins -PProjectB_Version=0.5 -PjenkinsRepoUrl=https://nexuscn.my-company.com/content/repositories/mainなどジェンキンス上:

ただ、すべてのタスクの前に、このどこかのようなものを置きます。

P .:私のコードは、実際のバージョンAPIに依存する可能性があるため、プロジェクトgradle.propertiesのProjectB_Versionプロパティを宣言します。

関連する問題