18

マルチプロジェクト Gradle 構造をプロジェクトに適用すると、settings.gradleは次のようになります。

include "source:compA:api"
include "source:compA:core"
include "source:compB"

グラドルプロジェクトは私にくれます

Root project 'tmp'
\--- Project ':source'
     +--- Project ':source:compA'
     |    +--- Project ':source:compA:api'
     |    \--- Project ':source:compA:core'
     \--- Project ':source:compB'

これはまさにディレクトリ構造です!
私のルート ディレクトリには、Java プラグインをすべてのサブプロジェクトに適用するbuild.gradleがあります。

subprojects {
    apply plugin: 'java'
}

ビルドすると、 :source:compAのアーティファクトが空になります。これは実際にはプロジェクトではないため、サブディレクトリapicoreだけが適切な Java プロジェクトです。

アーティファクトが空にならないようにする最善の方法は何ですか?

4

3 に答える 3

19

彼らがGradle 自身の settings.gradleファイルで使用しているトリックを試すことができます。各サブ プロジェクトがフォルダー内にどのように配置されているかに注意して'subprojects/${projectName}'ください。ただし、subprojectsフォルダー自体はプロジェクトではありません。

したがって、あなたの場合、次のようなことをします:

include "source:compA-api"
include "source:compA-core"
include "source:compB"

project(':source:compA-api').projectDir = new File(settingsDir, 'source/compA/api')
project(':source:compA-core').projectDir = new File(settingsDir, 'source/compA/core')

がプロジェクト コンテナとして評価されないようにcompA、 との間のコロンを意図的に省略しました。apisource:compA

または、次のようにして、プラグインが適用されないようにsource:compAプロジェクトを除外することもできます。java

def javaProjects() { 
  return subprojects.findAll { it.name != 'compA' }
} 

configure(javaProjects()) { 
  apply plugin: 'java' 
} 

編集: 代わりに、次のようなことを試すことができます(好みに合わせて調整してください):

def javaProjects() { 
  return subprojects.findAll { new File(it.projectDir, "src").exists() }
} 

configure(javaProjects()) { 
  apply plugin: 'java' 
} 
于 2012-07-02T14:37:56.040 に答える