2013-05-30 23 views
1

我有以下ext.libraries定義,我想公開所有我使用gradle構建的項目。我將如何做到這一點。我可以在哪裏定義它,以便它可以在我的項目中全局使用?定義所有我的gradle項目可以看到的屬性集

我的項目結構如下所示:

--projects 
     ----BaseFrameWork 
     ----ProjectA 
     ----ProjectB 

settings.gradle(項目目錄)

includeFlat 'BaseFramework', 'ProjectA', 'ProjectB' 

的build.gradle(項目目錄)

ext.libraries = [ 
    lib_core:[ 
     ":junit:4.0:", 
     ":log4j:1.2.8:", 
     ":ojdbc6:", 
     ":struts:1.1-tiger:" 
    ], 
    lib_jaxb: [ 
     ":jaxb-api:2.1.3:", 
     ":jaxb-impl:2.1.3:" 
    ] 
]  

allprojects { 
    apply plugin: 'java'   
} 

的build.gradle(BaseFramework DIR)

apply plugin: 'java' 
sourceSets.main.java.srcDir 'src/java' 
println "The root project is: " + rootProject 
compileJava { 
    options.compilerArgs << '-nowarn' 
} 

jar { 
    manifest { 
     attributes("Implementation-Title": "BaseFramework", "Implementation-Version": "1") 
    } 
    from ('./META-INF/') { 
     include 'DomainConfig.xml' 
     into('META-INF') 
    } 
} 

repositories { 
    flatDir dirs: "D:/myrepo" 
} 

dependencies { 
    compile libraries.lib_commons 
    compile libraries.lib_core 
    compile libraries.lib_jaxb 
} 

我再試試下面的,並得到一個錯誤。它不能在root build.gradle文件中看到我的庫屬性。它也看起來像是看到我的BaseFramework項目爲根?

D:\projects>cd BaseFramework  
D:\projects\BaseFramework>gradle build 
The root project is: root project 'BaseFramework' 

FAILURE: Build failed with an exception. 

* Where: 
Build file 'D:\prod\BaseFramework\build.gradle' line: 25 

* What went wrong: 
A problem occurred evaluating root project 'BaseFramework'. 
> Could not find property 'libraries' on root project 'BaseFramework'. 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

BUILD FAILED 

Total time: 2.624 secs 

D:\projects\BaseFramework> 

請幫助:(

回答

2

把它放在你的頂級build.gradle,任何部分的外面。然後,您可以從任何子項目進行訪問。

您還需要通過include更換includeFlatsettings.gradle中,否則會期望找到與projects目錄相同的目錄。

includeFlat tell Gradle那些兄弟目錄應該被視爲子項目。在你的情況下,BaseFrameworkProjectAProjectB不是projects目錄的兄弟姐妹,他們是孩子。

另一方面,include告訴Gradle那些孩子目錄應該被視爲子項目。這就是你想要的,所以子項目可以繼承在projects中聲明的變量。

+0

'ext.libraries'聲明可以停留在'allprojects'之外,因爲子項目可以看到由父項目聲明的額外變量。 'dependencies'塊應該放在裏面(儘管'subprojects'通常更合適)。 –

+0

並非所有的子項目都有相同的依賴關係:) – n4rzul

+0

你是對的,彼得,相應地修復了我的答案。 –

相關問題