idea中的gradle怎麼配置環境
A. gradle配置不成功,求助貼
近項目遇蠻煩問題Maven約定標准java項目代碼結構:
project
--src
--main
--java
--resources
--test
--java
--resources
『gradle idea』構建intelliJ項目文件自幫忙設置所Source RootTest Source Root我工作部門我希望測試unitintg2類別更加容易區測試目同提供Build Pipeline別運行同類別測試能力我部門內標准Java項目結構:
project
--src
--main
--java
--resources
--test
--common
--java
--unit
--java
--resources
--intg
--java
--resources
目錄結構我剩2問題要解決:
1. 何區運行IntegrationTestUnit Test
2. 何保證『gradle idea』需重新設置Test Source Rootgradle具備識別新代碼結構能力
何寫Gradle Plugin
語言:
JavaGroovyScala都推薦用Groovy,畢竟Gradle本質說用Groovy寫DSL使用Groovy更致點
注入式:
Gradle支持3種形式定製Plugin注入:
1. 直接Plugin源代碼直接寫Build Script面
2. Pluigin源代碼寫rootProjectDir/buildSrc/src/main/groovy目錄
3. 用單獨project寫Plugin源代碼jar依賴形式注入項目
覺都想要自寫Plugin定項目公用Plugin否則直接Plugin代碼直接寫腳本要定製Plugin我看定需要單獨jar形式注入
寫project-structure Plugin:
Gradle寫Plugin非簡單首先添加項目依賴我使用Groovy寫插件所添加localGroovy依賴
Gradle代碼
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
寫Plugin實現代碼實現代碼需要實現Plugin介面即我實現代碼做兩件事定製項目代碼結構二添加integrationTest Task該Task運行*IntegrationTest.class, Build Pipeline階段運行Unit TestIntegrationTest
Groovy代碼
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.testing.Test
class ProjectStructurePlugin implements Plugin {
@Override
void apply(Project project) {
project.logger.info "Configuring Project Structure for $project.name"
project.configurations {
integrationTestCompile { extendsFrom testCompile }
integrationTestRuntime { extendsFrom integrationTestCompile, testRuntime }
}
configureSourceSets(project)
addIntegrationTestTask(project)
}
private void addIntegrationTestTask(Project project) {
Test intgTest = project.getTasks().create("integrationTest", Test.class);
intgTest.testClassesDir = project.sourceSets.integrationTest.output.classesDir
intgTest.includes = ["**/*IntegrationTest.class"]
intgTest.inputs.dir 'src'
intgTest.outputs.dir project.sourceSets.integrationTest.output.classesDir
project.check.dependsOn project.integrationTest
intgTest.dependsOn project.test
}
private void configureSourceSets(Project project) {
project.sourceSets {
test {
java {
srcDir 'src/test/unit/java'
srcDir 'src/test/common/java'
}
resources {
srcDir 'src/test/unit/resources'
}
}
integrationTest {
java {
srcDir 'src/test/intg/java'
srcDir 'src/test/common/java'
}
resources {
srcDir 'src/test/intg/resources'
}
compileClasspath = project.sourceSets.main.output + project.sourceSets.test.output + project.configurations.integrationTestCompile
runtimeClasspath = output + compileClasspath + project.configurations.integrationTestRuntime
}
}
}
}
接著項目src/main/resources/META-INF/gradle-plugins目錄創建文件:.properties,該文件指定Plugin實現類:
Java代碼
implementation-class=com.xianlinbox.plugins.ProjectStructurePlugin
項目使用該Plugin
首先需要build.gradle腳本引入該Pluginjar包依賴文件形式更推薦jar包發布Maven庫Maven依賴形式注入本例使用本文件依賴:
Groovy代碼
buildscript {
dependencies {
classpath fileTree(dir: 'libs', include: '*.jar')
}
}
注入編寫插件注意該插件必須java plugin起使用其使用SourceSets屬性該插件引入進:
Groovy代碼
apply plugin: 'java'
apply plugin: 'project-structure'
插件通『gradle test』『gradle integrationtTest』區別運行UnitTestIntrgrationTest
解決自設置Test Source Root問題需要build.gradleideaMole Task增加識別Test Source Root能力即:
Groovy代碼
apply plugin: 'idea'
...
idea {
mole {
testSourceDirs += file('src/test/intg/java')
testSourceDirs += file('src/test/intg/resources')
}
}
我寫Plugin設置Project-Structrue:
Groovy代碼
......
compileClasspath = project.sourceSets.main.output + project.sourceSets.test.output + project.configurations.integrationTestCompile
runtimeClasspath = output + compileClasspath + project.configurations.integrationTestRuntime
project.idea {
mole {
testSourceDirs = testSourceDirs + new File('src/test/intg/java') + new File('src/test/intg/resources')
}
}
1、安裝
Gradle安裝Maven便需要載( )==》解壓==》配置環境變數(GRADLE_HOME & PATH)配置環境變數記使用 source命令使新環境變數效配置功命令行通 gradle -v"驗證否安裝功
2、Gradle編譯Maven風格java項目
首先項目根目錄創建"build.gradle"文件編譯java項目需要使用gradlejava插件
Groovy代碼
apply plugin: 'java'
,要集maven功能需要添加maven插件
Groovy代碼
apply plugin: 'maven'[
接著配置項目Repository風格
Groovy代碼
repositories{
mavenCentral();
}
面例使用默認maven央庫想用自本庫通式配置
Groovy代碼
def localMavenRepo = 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
repositories {
// Use local Maven repo location. We don't need this if we only want to install
// an artifact, but we do need it if we want to use dependencies from the local
// repository.
mavenRepo urls: localMavenRepo
mavenCentral()
}
再配置項目依賴第三庫配置模板:
Groovy代碼
dependencies{
compile group: '',name:'',version:''
}
舉例假設項目依賴4.10版本junit配置
Groovy代碼
compile group: 'junit',name:'junit',version:'4.10'
另外Depencies按式簡寫
Groovy代碼
compile '::'
例
Groovy代碼
compile 'junit:junit:4.10'
何自項目發布Repository
Groovy代碼
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
}
}