赞
踩
本项目使用Gradle构建SpringBoot项目,将不同的业务进行不同的模块划分;
- 编辑器:Intellij IDEA- 构建工具:Gradle6.5- SpringBoot版本:2.3.2.RELEASE- 版本管理:GitHub- 个人GitHub地址: - 项目Clone地址:https://github.com/liuc8023/zhifou.git
项目结构如下
首先创建一个项目,我们使用IDEA构建一个Gradle Java项目,作为项目的最外层,只做为整个项目的容器,所以最外层项目只构建为普通的Gradle项目即可;
File | New | Project
填写GroupId与ArtifactId;
一般正式项目的GroupId为com.*开头,也可因个人习惯自定义,具体规则大家可以参考命名规范,ArtifactId为项目名称;
给项目设置自己本地的Gradle地址
File | Settings | Build, Execution, Deployment | Build Tools | Gradle
项目已经创建好了,我们开始创建各个模块,在不同项目中,模块划分的方式也会不同,具体的模块划分可以按照实际项目的需求进行划分;
下面就可以按照自己的需求创建模块:
右键项目,点击 New -> Moduel,选择Gradle,如下图:
给新模块设置属性
父层项目settings.gradle设置如下:
父层项目build.gradle设置如下:
下面的配置供参考,有自己需要的配置,自行百度,然后配进去
group 'com.springcloud.zhifou'version '1.0-SNAPSHOT'// buildscript 代码块中脚本优先执行buildscript { // ext 用于定义动态属性 ext { springBootVersion = '2.3.2.RELEASE' } //仓库管理 repositories { // 本地maven仓库 mavenLocal() //自定义maven仓库地址 maven { url = 'http://maven.aliyun.com/nexus/content/groups/public/' } mavenCentral() google() //和maven中央仓库一样的另一个依赖管理仓库,主要是java jcenter() maven { url "https://repo.spring.io/snapshot" } maven { url "https://repo.spring.io/milestone" } maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' } } /** * api 用于取代compile(已被废弃) * api或compile关键字引用的包对于其他module来说是可见的, * implementation关键字引用的包对于其他module来说是不可见的。 */ //项目依赖 dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") }}//allprojects所有项目共享的配置allprojects { apply plugin: 'java' apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'java-library' sourceCompatibility = 1.8 targetCompatibility = 1.8}// subprojects : 所有子模块共享的配置subprojects { apply plugin: 'java' apply plugin: 'idea' // java编译的时候缺省状态下会因为中文字符而失败 [compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8' // 配置所有子模块的依赖仓库地址 repositories { // 本地maven仓库 mavenLocal() mavenCentral() maven { url = 'http://maven.aliyun.com/nexus/content/groups/public/' } //和maven中央仓库一样的另一个依赖管理仓库,主要是java jcenter() } ext {//依赖版本 lombokVersion= '1.18.12' fastjsonVersion = "1.2.54" disruptorVersion = '3.4.2' log4jVersion = '2.13.3' commonslang3Version = '3.11' commonsCodecVersion = '1.14' javaxAnnotationApiVersion = '1.3.2' jansiVersion = '1.18' huToolVersion = '5.3.10' servletApiVersion = '4.0.1' mapStructVersion = '1.3.1.Final' } //所有子模块共有依赖 dependencies{ //这里如果配置了jar包依赖,所有子项目共享,使用了gradle的依赖传递特性。 compile( //引入disruptor并发框架 "com.lmax:disruptor:$disruptorVersion", //log4j "org.apache.logging.log4j:log4j-core:$log4jVersion", "org.apache.logging.log4j:log4j-api:$log4jVersion", "log4j:log4j:1.2.17", //通用基础库 "org.apache.commons:commons-lang3:$commonslang3Version", "commons-codec:commons-codec:$commonsCodecVersion", "jaxen:jaxen:1.2.0", "javax.annotation:javax.annotation-api:$javaxAnnotationApiVersion", "javax.servlet:javax.servlet-api:$servletApiVersion", //lombok "org.projectlombok:lombok:$lombokVersion", //控制台彩色字体库 "org.fusesource.jansi:jansi:$jansiVersion", "cn.hutool:hutool-all:$huToolVersion", //FastJson "com.alibaba:fastjson:$fastjsonVersion", //mapstruct "org.mapstruct:mapstruct-jdk8:$mapStructVersion", "org.mapstruct:mapstruct-processor:$mapStructVersion" ) // 测试依赖 testCompile( "org.springframework.boot:spring-boot-starter-test:$springBootVersion", "junit:junit:4.12" ) } //所有需要忽略的包定义在此 configurations { //移除spring boot 默认logger依赖 all*.exclude module: 'spring-boot-starter-logging' } //我们为 Java 项目指定了版本号以及所用的 JDK 版本,并且添加一些属性到 mainfest 中。 jar { manifest { attributes("Implementation-Title": "Gradle") } } gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" } } //Gradle 和 idea 集成时如何不自动下载依赖源码和javadoc idea { module { downloadJavadoc = false downloadSources = false } } //如果是Gradle 4.6及以上版本,则Gradle原生支持Junit5 test { useJUnitPlatform() testLogging { showStandardStreams = true exceptionFormat = "full" } }}
子工程build.gradle设置如下:
// buildscript 代码块中脚本优先执行buildscript { // ext 用于定义动态属性 ext { springBootVersion = '2.3.2.RELEASE' springloadedVersion = '1.2.8.RELEASE' } //仓库管理 repositories { // 本地maven仓库 mavenLocal() //自定义maven仓库地址 maven { url = 'http://maven.aliyun.com/nexus/content/groups/public/' } mavenCentral() google() //和maven中央仓库一样的另一个依赖管理仓库,主要是java jcenter() maven { url "https://repo.spring.io/snapshot" } maven { url "https://repo.spring.io/milestone" } maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' } } /** * api 用于取代compile(已被废弃) * api或compile关键字引用的包对于其他module来说是可见的, * implementation关键字引用的包对于其他module来说是不可见的。 */ //项目依赖 dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") //配置热部署 classpath ("org.springframework:springloaded:${springloadedVersion}") }}group 'com.springcloud'version '1.0'apply plugin: 'java'apply plugin: 'org.springframework.boot'apply plugin: 'io.spring.dependency-management'// 配置该项目特有的依赖dependencies { //如果要做jar包分离,此处必须要使用compile,不然系统启动失败,血的教训 compile( //springboot "org.springframework.boot:spring-boot-starter-web:$springBootVersion", "org.springframework.boot:spring-boot-devtools:$springBootVersion", ) testCompile 'org.springframework.boot:spring-boot-starter-test' annotationProcessor 'org.projectlombok:lombok' compileOnly 'org.projectlombok:lombok'}configurations { // 所有需要忽略的包定义在此 //移除spring boot 默认logger依赖 all*.exclude module: 'spring-boot-starter-logging'}// 清除现有的lib目录task clearJar(type: Delete) { delete "$buildDir/libs/lib"}// 将依赖包复制到lib目录task copyJar(type: Copy, dependsOn: 'clearJar') { from configurations.compileClasspath into "$buildDir/libs/lib"}bootJar { // 例外所有的jar excludes = ["*.jar"] // lib目录的清除和复制任务 dependsOn clearJar dependsOn copyJar // 指定依赖包的路径 manifest { attributes "Manifest-Version": 1.0, 'Class-Path': configurations.compileClasspath.files.collect { "lib/$it.name" }.join(' ') }}
其中clearJar、copyJar及bootJar作用是将子工程(customer-center)单独打一个可运行的jar包,其依赖的jar包放到customer-center工程下的bulid | libs | lib下,如下图:
然后在项目中新增启动类及测试方法,如下:
package com.springcloud.zhifou.customer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;/** * @author liuc */@RestController@SpringBootApplicationpublic class CustomerCenterApplication { public static void main(String[] args) { SpringApplication.run(CustomerCenterApplication.class, args); } @RequestMapping(value="/hello",method= RequestMethod.GET) public String hello(){ return "Hello World"; }}
至此,可以使用gradle中的build工具编译打包了,然后进行测试
下面是build运行的结果:
0:24:09: Executing task 'build'...> Task :customer-center:compileJava UP-TO-DATE> Task :customer-center:processResources NO-SOURCE> Task :customer-center:classes UP-TO-DATE> Task :customer-center:clearJar> Task :customer-center:copyJar> Task :customer-center:bootJar UP-TO-DATE> Task :customer-center:jar SKIPPED> Task :customer-center:assemble UP-TO-DATE> Task :customer-center:compileTestJava NO-SOURCE> Task :customer-center:processTestResources NO-SOURCE> Task :customer-center:testClasses UP-TO-DATE> Task :customer-center:test NO-SOURCE> Task :customer-center:check UP-TO-DATE> Task :customer-center:build UP-TO-DATEDeprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.Use '--warning-mode all' to show the individual deprecation warnings.See https://docs.gradle.org/6.5/userguide/command_line_interface.html#sec:command_line_warningsBUILD SUCCESSFUL in 2s4 actionable tasks: 2 executed, 2 up-to-date0:24:11: Task execution finished 'build'.
最后启动项目
通过浏览器访问测试一下,看项目是否可用
http://localhost:8080/hello
运行结果如图
如此文对大家有微薄帮助,胖友们给个赞再走呗!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。