maven resource 组件可以把pom的变量替换到相关的resouces目录中的资源文件变量
示例项目:内容中心 (文章管理) 生成jar包,生成docker ,生成k8s文件
1.项目结构
├── content-api│ ├── pom.xml│ └── src│ ├── main│ │ └── java│ │ └── com│ │ └── itstudy│ │ └── content_api│ │ ├── domain│ │ │ └── ArticleInfo.java│ │ └── service│ │ └── ArticleService.java│ └── test│ └── java│ └── com│ └── itstudy│ └── content_api│ └── AppTest.java├── content-server│ ├── pom.xml│ └── src│ ├── bin│ │ └── app.sh│ ├── main│ │ ├── java│ │ │ └── com│ │ │ └── itstudy│ │ │ └── content_server│ │ │ ├── ContentServerApp.java│ │ │ ├── controller│ │ │ │ └── ArticleController.java│ │ │ └── service│ │ │ └── impl│ │ │ └── ArticleServiceImpl.java│ │ └── resources│ │ ├── dev│ │ │ ├── application.yml│ │ │ ├── docker│ │ │ │ └── Dockerfile│ │ │ └── k8s│ │ │ ├── content-center-rc.yml│ │ │ └── content-center-svc.yml│ │ └── pro│ │ ├── application.yml│ │ ├── docker│ │ │ └── Dockerfile│ │ └── k8s│ │ ├── content-center-rc.yml│ │ └── content-center-svc.yml│ └── test│ └── java│ └── com│ └── itstudy│ └── content_api│ └── ContentServerAppTest.java└── pom.xml
2. 父级项目pom文件
4.0.0 com.itstudy contentcenter 1.0-SNAPSHOT content-api content-server pom contentcenter org.springframework.cloud spring-cloud-starter-parent Camden.SR5 nexus-releases Nexus Release Repository http://maven.mysite.com/nexus/content/repositories/demo-Release/ nexus-snapshots Nexus Snapshot Repository http://maven.mysite.com/nexus/content/repositories/demo-Snapshot/ UTF-8 1.8 1.8 junit junit 4.11 test org.apache.maven.plugins maven-source-plugin true package jar-no-fork com.spotify docker-maven-plugin 0.4.11 dockerimage.mysite.com/contentcenter/${project.artifactId} dockerimage.mysite.com/java/alpine-oraclejdk8:8.131.11-slim contentcenter-${project.version} my@mail.com ["java", "-Djava.security.egd=file:/dev/./urandom","-jar", "${project.build.finalName}.jar"] /tmp docker-image / ${project.build.directory} ${project.build.finalName}.jar maven-compiler-plugin 3.1
2.2实体类
package com.itstudy.content_api.domain;public class ArticleInfo { private String id; private String content; //省略geter setter}
2.3接口
package com.itstudy.content_api.service;import com.itstudy.content_api.domain.ArticleInfo;public interface ArticleService { void insert(ArticleInfo item); void update(ArticleInfo item);}
3 content-server项目 具体业务服务
3.1 pom文件
contentcenter com.itstudy 1.0-SNAPSHOT 4.0.0 content-server content-server UTF-8 1.8 1.8 org.springframework.cloud spring-cloud-starter-eureka org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-mongodb org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-actuator junit junit 4.11 test com.itstudy content-api 1.0-SNAPSHOT compile dev true pro 192.168.146.8:27017,192.168.146.9:27017,192.168.146.10:27017 username:password@dbname-test dbname-test http://192.168.146.76:50002/eureka/ 192.168.146.11:22122 192.168.146.11:22122 1501 601 ${project.name} 8080 pro pro 192.168.146.8:27017,192.168.146.9:27017,192.168.146.10:27017 username:password@dbname dbname http://ds:8761/eureka/ 192.168.146.11:22122 192.168.146.11:22122 1501 601 8080 ${project.name} ${project.basedir}/src/main/resources dev/** pro/** ${project.basedir}/src/main/resources/${profile-name} true **/*.properties **/*.yml **/*.xml **/Dockerfile ${project.basedir}/src/main/resources/ false **/*.xml org.springframework.boot spring-boot-maven-plugin
3.2 service.impl
package com.itstudy.content_server.service.impl;import com.itstudy.content_api.domain.ArticleInfo;import com.itstudy.content_api.service.ArticleService;import org.springframework.stereotype.Service;@Servicepublic class ArticleServiceImpl implements ArticleService { @Override public void insert(ArticleInfo item) { } @Override public void update(ArticleInfo item) { }}
3.3 controller
package com.itstudy.content_server.controller;import com.itstudy.content_api.domain.ArticleInfo;import com.itstudy.content_api.service.ArticleService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/article")public class ArticleController { @Autowired ArticleService articleService; @PostMapping("/insert") public void postInsert(@RequestBody ArticleInfo info){ //其它业务 } @PostMapping("/update") public void postUpdate(@RequestBody ArticleInfo info){ //其它业务 }}
3.4 springboot 启动类app
package com.itstudy.content_server;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;/** * 项目启动类 */@SpringBootApplication@EnableEurekaClientpublic class ContentServerApp{ public static void main( String[] args ) { System.out.println("内容中心-启动中..."); SpringApplication.run(ContentServerApp.class, args); System.out.println("内容中心-启动成功"); }}
3.5 resources目录
3.5.1 resources/dev/docker/Dockerfile
FROM dockerimage.mysite.com/java/alpine-oraclejdk8:8.131.11-slimVOLUME /tmpADD @project.build.finalName@.jar app.jarRUN sh -c 'touch /app.jar'ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"
3.5.2 resource/dev/k8s/rc 及 resources/dev/k8s/svc
1) rc文件
apiVersion: v1kind: ReplicationControllermetadata: name: @project.artifactId@spec: replicas: 1 selector: name: @project.artifactId@ template: metadata: labels: name: @project.artifactId@ spec: containers: - name: api image: dockerimage.mysite.com/@app-name@/@app-name@ ports: - containerPort: 8080
2)svc文件
apiVersion: v1kind: Servicemetadata: name: @app-name@ #也可替换为 @project.artifactId@spec: selector: name: @app-name@ #也可替换为 @project.artifactId@ ports: - name: http port: 8080 protocol: TCP nodePort: 30008 type: NodePort
3.6 application.yml文件
server: port: @app-port@spring: application: name: @app-name@ # 项目名称尽量用小写 jmx: enabled: falsehystrix: command: default: execution: timeout: enabled: falseeureka: client: serviceUrl: defaultZone: @plateform-ds@ # 指定注册中心的地址 instance: preferIpAddress: truefdfs: soTimeout: @app-dfs-sotimeout@ connectTimeout: @app-dfs-connecttimeout@ thumbImage: #缩略图生成参数 width: 150 height: 150 trackerList: #TrackerList参数,支持多个 - @app-dfs1@ - @app-dfs2@
3.7 resource/pro文件夹与dev文件夹文件相似,只是个别配置不同。
4.重要总结
4.1 在pom文件中,引用maven变量使用 ${变量名}即可
4.2 在springboot项目中,使用maven resources组件时,使用@变量名@ 进行取值(因为springboot项目中进行了特殊处理)
4.3 在使用maven resources组件时
* 匹配 0或N个字符 ** 匹配 0或N个目录 如果使用*不能实现相应功能,请切换** 即可 dev/** pro/**
4.4 在使用maven resources组件时,只要增加了resource这个节点,必须重新指定resources文件夹位置
如示例: