1,项目一般是 :父工程+N个子工程(父工程打包类型为pom,子工程为jar(默认为jar))
前提概念讲解:
maven项目:
指符合maven规范的项目:一个文件夹下面有src目录跟pom.xml文件就叫maven项目
javaweb项目跟java项目:
java项目是可以直接在jvm(jdk)上运行的字节码文件(**.class) 打包为jar包。
java-web项目是需要放到web容器(tomcat、 jboss 、resin、 weblogic、 websphere、 glassfish)上在jvm(jdk)上运行的字节码文件,打包为war包放到web容器中运行,或者打包成jar包直接运行(如springboot项目)。
普通的maven项目跟springboot项目:
1,都符合maven项目规范
2,springboot项目内置tomcat(<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>)
3.所以springboot项目可以直接打成jar包通过java -jar 运行。
4.maven需要打成war包,放到tomcat 的web目录下运行。
1.1这是一个父工程的pom文件(一般以maven项目作为父工程,此处为springboot为父工程)
父工程一般不写逻辑代码,只是规范子工程:springboot比maven多了很多内置东西,显得较重,如tomcate;所以一般用maven项目作为父工程;
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
//maven2.0固定写法
<modelVersion>4.0.0</modelVersion>
/**
maven仓库管理当前项目jar包:com/insurance/insure:insure-1.0.0.pom
**/
<groupId>com.insurance</groupId>
//当前项目的唯一id,因为一个groupid下面可以有多个artifactid
<artifactId>insure</artifactId>
<version>1.0.0</version>
//打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar
<packaging>pom</packaging>
//这是一个springboot工程默认的父依赖,这个依赖是一个pom类型项目,注意后面的<dependencyManagement>标签的使用;
/**
springboot默认父依赖的作用:
1.定义了 Java 编译版本为 1.8 。
2.使用 UTF-8 格式编码。
3.继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
4.执行打包操作的配置。
5.自动化的资源过滤。
6.自动化的插件配置。
针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。
**/
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
/**
<properties>
<key>value</key>
</properties>
为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${key}
**/
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>10</java.version>
</properties>
<!--公共依赖-->
<dependencies>
<groupId>com.winner.trade</groupId>
<artifactId>trade-test</artifactId>
<version>1.0.0-SNAPSHOT</version>
//maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围)
<scope>test</scope>
// 设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似
<optional>false</optional>
//屏蔽依赖关系。 比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版,现在想统一使用2.0版,就应该屏蔽掉对1.0版的依赖 -->
//少用,有时当前的依赖有多个jdk版本需要指定特定版本才会用到
<classifier>jdk15</classifier>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependencies>
//当前项目的相对路径
<modules>
<module>good-auth</module>
<module>good-config</module>
<module>good-common</module>
<module>good-eureka</module>
<module>good-gateway</module>
<module>good-modules</module>
</modules>
//构建配置,打包
<build>
//使用插件设置
<pluginManagement>
//插件列表
<plugins>
//插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<!-- <executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions> -->
</plugin>
<plugin>
//指定maven编译的jdk版本,如果不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source> //源代码使用的JDK版本 -->
<target>${java.version}</target> //需要生成的目标class文件的编译版本 -->
<skip>true</skip>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
//远程仓库到本地git仓库配置<!-- 使用aliyun镜像 -->
<repositories>
<repository>
<id>aliyun</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
</repositories>
//依赖配置,一般在pom类型中会用到到,定义了版本号,子项目在导依赖时,不再需要version,而会主动引用这儿配置的version
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
1.2一个springboot子工程
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.insurance.insure</groupId>
<artifactId>insure-config</artifactId>
<packaging>jar</packaging>
//父工程中modules里面写的
<name>insure-config</name>
<description>配置中心</description>
//父工程
<parent>
<groupId>com.insurance</groupId>
<artifactId>insure</artifactId>
<version>1.0.0</version>
</parent>
<dependencies>
<!--配置中心服务-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!--消息总线-->
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency> -->
</dependencies>
/**
springboot组件打包的代码。idea的maven里面的plugins
**/
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<finalName>${project.name}</finalName>
</configuration>
</plugin>
</plugins>
</build>
</project>