項目
- src
-主
- java
-資源
-測試
- java
-資源
“Grad LEIDEA”構建intelliJ項目文件並幫助設置源根目錄測試源根目錄。我在部門工作,希望更容易考unitintg2類別。測試的目的與為構建管道提供運行相同類別測試的能力是壹樣的。我們部門的標準Java項目結構:
項目
- src
-主
- java
-資源
-測試
-常見
- java
-單位
- java
-資源
- intg
- java
-資源
目錄結構我有兩個問題要解決:
1.在哪裏運行IntegrationTestUnit測試?
2.如何保證‘Grad Le Idea’需要重置?測試源Rootgradle具有識別新代碼結構的能力。
如何編寫Gradle插件
語言:
JavaGroovyScala推薦Groovy。畢竟Gradle本質上說的是用Groovy寫DSL更合適。
註射類型:
Gradle支持三種形式的定制插件註入:
1.直接插件源代碼直接寫構建腳本面。
2.Pluigin源代碼寫root project dir/buildrsrc/src/main/groovy目錄。
3.用單獨的項目寫插件源代碼,以jar依賴的形式註入到項目中。
我想大家都想自己寫壹個插件,為項目設置壹個公共插件,或者直接為插件代碼寫壹個腳本,自定義插件。我認為它需要以壹個單獨的罐子的形式被註射。
編寫項目結構插件:
Gradle寫插件不容易。首先,添加項目依賴項。我用Groovy寫插件添加的localGroovy依賴項。
格雷爾碼
應用插件:“groovy”
依賴關系{
編譯gradleApi()
編譯localGroovy()
}
要寫插件實現代碼,妳需要實現插件接口,也就是我需要實現代碼做兩件事來定制項目代碼結構。其次,添加integrationTest任務,該任務運行* Integration Test。類,並在生成管道階段運行單元TestIntegrationTest。
Groovy代碼
導入org.gradle.api.Plugin
導入org.gradle.api.Project
導入org . grad le . API . tasks . testing . test
類ProjectStructurePlugin實現插件{
@覆蓋
作廢應用(項目項目){
project.logger.info“為project.name配置項目結構”
project.configurations {
integrationTestCompile { extends from test compile }
integrationTestRuntime { extends from integrationTestCompile,testRuntime }
}
配置資源集(項目)
addIntegrationTestTask(項目)
}
私有void addIntegrationTestTask(項目項目){
Test intgTest = project.getTasks()。create("integrationTest ",test . class);
int gtest . test classes dir = project . source sets . integration test . output . classes dir
int gtest . includes =[* */* integration test . class "]
intgTest.inputs.dir 'src '
int gtest . outputs . dir project . source sets . integration test . output . classes dir
project . check . depends on project . integration test
依賴於項目
}
私有void configureSourceSets(項目項目){
project.sourceSets {
測試{
java
srcDir 'src/test/unit/java '
srcDir 'src/test/common/java '
}
資源{
src dir ' src/測試/單元/資源'
}
}
集成測試{
java
srcDir 'src/test/intg/java '
srcDir 'src/test/common/java '
}
資源{
srcDir 'src/test/intg/resources '
}
compileClasspath = project . source sets . main . output+project . source sets . test . output+project . configuration s . integrationtestcompile
runtime class path = output+compile class path+project . configuration s . integration testruntime
}
}
}
}
然後項目src/main/resources/meta-INF/grad le-Plugins目錄創建壹個文件:。屬性,它指定插件實現類:
Java代碼
implementation-class = com . xianlinbox . plugins . projectstructureplugin
該項目使用這個插件。
首先需要build.gradle腳本來引入Pluginjar包的依賴文件形式。建議發布jar包,註入Maven庫的Maven依賴形式。此示例使用了此文件依賴關系:
Groovy代碼
構建腳本{
依賴關系{
類路徑文件樹(目錄:' libs ',包含:' *。罐子’)
}
}
註入和編寫插件。註意,這個插件必須由java plugin使用。它使用SourceSets屬性。該插件被引入到:
Groovy代碼
應用插件:“java”
應用插件:“項目-結構”
插件通過“gradle test”和“gradle integration test”運行UnitTestIntrgrationTest。
要解決自行設置測試源根的問題,需要通過build.gradleideaModule任務來增加識別測試源根的能力,即:
Groovy代碼
應用插件:“想法”
...
想法{
模塊{
testSourceDirs+= file(' src/test/intg/Java ')
testSourceDirs+= file(' src/test/intg/resources ')
}
}
我編寫插件來設置項目結構:
Groovy代碼
......
compileClasspath = project . source sets . main . output+project . source sets . test . output+project . configuration s . integrationtestcompile
runtime class path = output+compile class path+project . configuration s . integration testruntime
project.idea {
模塊{
testSourceDirs = testSourceDirs +新文件(' src/test/intg/java') +新文件(' src/test/intg/resources ')
}
}
1,安裝
Maven的Gradle安裝需要加載()= = "解壓縮= = "配置環境變量(gradle _ home &;PATH)配置環境變量。記住使用source命令使新的環境變量有效地配置函數。命令行gradle -v "驗證是否安裝了該函數。
2.Gradle編譯Maven風格的java項目。
首先,在項目根目錄下創建壹個“build.gradle”文件。要編譯壹個java項目,需要使用gradlejava插件。
Groovy代碼
應用插件:“java”
要集成maven功能,需要添加maven插件。
Groovy代碼
應用插件:“maven”[
然後配置項目存儲庫樣式。
Groovy代碼
存儲庫{
maven central();
}
該示例使用默認的maven中央庫,並希望使用該庫的壹般配置。
Groovy代碼
def localMavenRepo = ' File://'+new File(system . getproperty(' user . home '),' . m2/repository ')。絕對路徑
存儲庫{
//使用本地Maven repo位置。如果我們只想安裝,我們不需要這個
//壹個工件,但是如果我們想從本地使用依賴項,我們確實需要它
//知識庫。
maven repo URL:localMavenRepo
mavenCentral()
}
重新配置項目取決於第三個庫配置模板:
Groovy代碼
依賴關系{
編譯組:“”,名稱:“”,版本:“”
}
例如,假設項目依賴於版本4.10的junit配置。
Groovy代碼
編譯組:“junit”,名稱:“junit”,版本:“4.10”
此外,Depencies縮寫為
Groovy代碼
編譯“::”
例子
Groovy代碼
編譯“junit:junit:4.10”
鶴子項目發布庫
Groovy代碼
上傳檔案{
存儲庫{
mavenDeployer {
存儲庫(URL:“file://localhost/tmp/my repo/”)
}
}