前文
独自の「外部」ライブラリがあり、このライブラリを使用する独自のアプリケーションがあります(外部リポジトリを介してロードされます)。 ライブラリとアプリケーションの両方で変更が必要です。
ライブラリをコンパイルしてローカルのMavenリポジトリに配置してから、アプリケーションをビルドするようです。 しかし、ライブラリ内のコードをすぐに修正してアプリケーションの変更を試み、同時にIDE設定などを含むライブラリとアプリケーションコードの別々のストレージを維持したいです。
ファイルシステムにgradleリンクとシンボリックリンクを使用すると、これを簡単に配置できます。
図書館
最初に、ライブラリのbuild.gradleのコンテンツの例を示します。
import java.text.SimpleDateFormat apply plugin: 'java' apply plugin: 'maven-publish' sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 jar.baseName = 'library' publishing { publications { mavenJava(MavenPublication) { groupId='name.alenkov.habr.gradle-dynamic-dependency' version = new SimpleDateFormat('yyyyMMddHHmm').format(new Date()) from components.java } } }
ここで重要なのは、「version = new SimpleDateFormat( 'yyyyMMddHHmm')。Format(new Date())」という行です。これは、リポジトリでの公開時の現在の時刻に基づいてアセンブリのバージョンを設定します。
免責事項 :デモアプリケーションでは、製品環境でライブラリの複数のブランチをサポートしていないため、XYZビューのバージョン管理をサポートする必要はありません。
注:例では、ローカルMavenを使用しますが、Artifactoryを使用した例を提供しません。 これはアプローチに影響しません。
アプリ
それでは、アプリケーションでbuild.gradleを設定していきましょう。
build.gradleの初期状態:
apply plugin: 'java' sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 repositories { mavenLocal() jcenter() } dependencies { compile 'name.alenkov.habr.gradle-dynamic-dependency:library:+' }
では、gradleの設定を変更して、必要なものを取得しましょう。モジュールを動的に接続します。
最初のステップは、ライブラリをextサブディレクトリのアプリケーションプロジェクトにリンクすることです。
cd ./app/ext ln -s ../../library/ ./
2番目のステップは、小さなコードをsettings.gradleに追加することです。これにより、gradleプロジェクトの「/ ext」ディレクトリがスキャンされ、プロジェクトに接続されます。
final extDir = new File(rootDir, 'ext') if (extDir.exists()) { extDir.eachDir { dir -> if (new File(dir, 'build.gradle').exists()) { logger.trace('found ext module: ' + dir.name) final String prjName = ':' + dir.name logger.lifecycle('include ext project: ' + prjName) include prjName project(prjName).projectDir = dir project(prjName).name = 'ext-' + dir.name } } }
3番目の最後の仕上げ-build.gradleの依存関係セクションを変更します。
dependencies { compile findProject(':ext-library') ?: module(group: 'name.alenkov.habr.gradle-dynamic-dependency', name: 'library', version: '+') }
また、ライブラリに追加のgradleタスクがある場合の例:
Gradleプラグイン
同様に、外部のgradleプラグインを追加できます。
手順:
1. buildSrcディレクトリを作成します
2.ファイルbuildSrc / settings.gradleを作成します
final extDir = rootDir if (extDir.exists()) { extDir.eachDir { dir -> if (new File(dir, 'build.gradle').exists()) { logger.trace('found ext plugin: ' + dir.name) final String prjName = ':' + dir.name logger.lifecycle('include ext plugin: ' + prjName) include prjName project(prjName).projectDir = dir project(prjName).name = 'ext-plugin-' + dir.name } } }
3.ファイルbuildSrc / build.gradleを作成します
dependencies { runtime subprojects.collect { owner.project(it.path) } }
これで、 buildSrcの外部プラグインをリンクするだけで十分です。 プロジェクトでどのように選択されるかです。
cd ./app/buildSrc ln -s ../../gradle-plugin/ ./
現在の不便さから-IDEAでは、動的モジュールとプラグインは正しく接続されていません- バグとバグ 。
両方のモジュールとプラグインのソースコードは、 githubで表示できます。
UPD:同様に、gradleプラグインはbuildSrcにマウントすることによってのみ接続できます。 誰かがいる場合、私は例を書くことができます...
UPD:プラグインを使用した例を追加しました