分享

IDEA中使用springBoot+gradle构建多模块项目

 quasiceo 2018-08-18
最近项目中用到了springboot+gradle来构建多模块项目,写这篇文章纯当作笔记吧,同时也分享给大家。
gradle和maven是目前很便捷的两款项目构建工具,都有各自的优势。据官方统计,gradle比maven构建项目时快100倍以上。废话不多说,下面介绍一下如何使用gradle创建多模块化工程。

1.创建项目

首先创建项目,名称为 myGradleProject,创建命令如下:

  1. mkdir myGradleProject
  2. cd myGradleProject
  3. gradle init

执行如下:



这时候的项目结构如下:



然后,创建多模块。这里以webOne和webTwo模块为例,先创建两个目录:
Windows下创建命令如下:
  1. mkdir webOne\src\main\java,webOne\src\main\resource,webOne\src\test\java,webOne\src\test\resource
  2. mkdir webTwo\src\main\java,webTwo\src\main\resource,webTwo\src\test\java,webTwo\src\test\resource
Linux下创建命令如下:
  1. mkdir -p webOne/src/main/{java,resources} webOne/src/test/{java,resource}
  2. mkdir -p webTwo/src/main/{java,resources} webTwo/src/test/{java,resource}

此时的目录结构如下:



2.修改配置

我们首先修改根目录下的 settings.gradle 文件,引入子模块:

include 'webOne','webTwo' 

编辑根目录下的 build.gradle,具体配置如下:

  1. // 所有子项目的通用配置
  2. subprojects {
  3. apply plugin: 'java'
  4. apply plugin: 'eclipse'
  5. apply plugin: 'idea'

  6. version = '1.0.0'

  7. // JVM 版本号要求
  8. sourceCompatibility = 1.8
  9. targetCompatibility = 1.8

  10. // java编译的时候缺省状态下会因为中文字符而失败
  11. [compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8'

  12. //定义版本号
  13. ext {
  14. springBootVar = '1.4.5.RELEASE'
  15. }

  16. repositories {
  17. mavenLocal()
  18. maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
  19. mavenCentral()
  20. jcenter()
  21. maven { url "http://repo./snapshot" }
  22. maven { url "http://repo./milestone" }
  23. maven { url 'http://maven./release' }
  24. maven { url 'http://maven./milestone' }
  25. }

  26. dependencies {
  27. compile(
  28. )

  29. testCompile(
  30. )
  31. }

  32. jar {
  33. manifest {
  34. attributes("Implementation-Title": "Gradle")
  35. }
  36. }

  37. configurations {
  38. // 所有需要忽略的包定义在此
  39. //all*.exclude group: 'commons-httpclient'
  40. //all*.exclude group: 'commons-logging'
  41. //all*.exclude group: 'commons-beanutils', module: 'commons-beanutils'
  42. }

  43. // 显示当前项目下所有用于 compile 的 jar.
  44. task listJars(description: 'Display all compile jars.') << {
  45. configurations.compile.each { File file -> println file.name }
  46. }

  47. gradle.projectsEvaluated {
  48. tasks.withType(JavaCompile) {
  49. options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
  50. }
  51. }
  52. }

其次,在webOne模块下新建settings.gradle文件,配置对webTwo模块的依赖,如下:

  1. buildscript {
  2. repositories {
  3. mavenLocal()
  4. maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
  5. maven { url "http://repo./snapshot" }
  6. maven { url "http://repo./milestone" }
  7. jcenter()
  8. }
  9. dependencies {
  10. classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.5.RELEASE")
  11. }
  12. }

  13. apply plugin: 'org.springframework.boot'

  14. archivesBaseName = 'webOne'

  15. ext {
  16. springBootVar = '1.4.5.RELEASE'
  17. }

  18. dependencies {
  19. compile project(':webTwo')

  20. // spring boot
  21. compile "org.springframework.boot:spring-boot-starter-web:$springBootVar"

  22. testCompile "org.springframework.boot:spring-boot-starter-test:$springBootVar"
  23. }

最后,在webTwo模块下新建settings.gradle文件,如下:

  1. buildscript {
  2. repositories {
  3. mavenLocal()
  4. maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
  5. maven { url "http://repo./snapshot" }
  6. maven { url "http://repo./milestone" }
  7. jcenter()
  8. }
  9. dependencies {
  10. classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.5.RELEASE")
  11. }
  12. }

  13. apply plugin: 'org.springframework.boot'

  14. archivesBaseName = 'webTwo'


  15. ext {
  16. }

  17. bootRepackage{
  18. enabled = false
  19. }

  20. build{
  21. }

  22. dependencies {
  23. }

  24. configurations {
  25. // 所有需要忽略的包定义在此
  26. //all*.exclude group: 'commons-httpclient'
  27. //all*.exclude group: 'commons-beanutils', module: 'commons-beanutils'
  28. }
3.编写测试代码
使用intelliJ Idea导入项目(项目路径D:\myproject\myGradleProject)。


新增webOne模块项目启动类:webOne\src\main\java\com\forMelo\Application.java,代码如下:

  1. package main.java.com.forMelo;

  2. /**
  3. * Created by songqiuming on 2018/1/7.
  4. */
  5. @ComponentScan( basePackages = {"com.forMelo"})
  6. @EnableAutoConfiguration
  7. public class Application extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer{
  8. public static void main(String[] args) {
  9. SpringApplication.run(Application.class, args);
  10. }

  11. @Override
  12. public void customize(ConfigurableEmbeddedServletContainer container) {
  13. container.setPort(8080);
  14. }
  15. }
新增webOne模块测试类webOne\src\main\java\com\forMelo\controller\test.java,代码如下:

  1. package main.java.com.forMelo.controller;

  2. /**
  3. * Created by songqiuming on 2018/1/7.
  4. */
  5. @Controller
  6. public class test {
  7. @RequestMapping(value = "/test1", method = RequestMethod.GET)
  8. public String test1(){
  9. return "spring boot multiple modules test";
  10. }

  11. @RequestMapping(value = "/test2/{number1}/{number2}", method = RequestMethod.GET)
  12. @ResponseBody
  13. public String test2(@PathVariable int number1, @PathVariable int number2) {
  14. return number1 + "+" + number2 + "=" + testUtils.add(number1,number2);
  15. }

  16. }

新增webTwo模块测试类webTwo\src\main\java\com\forMelo\testUtil.java

  1. package main.java.com.forMelo;

  2. /**
  3. * Created by songqiuming on 2018/1/7.
  4. */
  5. public class testUtil {
  6. public static int add(int a, int b){
  7. return a + b;
  8. }
  9. }

此时的项目结构下图:


4.测试Demo
运行启动类中main方法。
使用浏览器访问http://127.0.0.1:8080/test1,浏览器显示spring boot multiple modules test。
使用浏览器访问http://127.0.0.1:8080/test2/10/5,得到结果number1+number2=15.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多