该篇文章适合maven 有点基础的童鞋,pom文件里面配置比较多,记录下来运用起来才是自己的。这是我的笔记,不喜勿喷
创建parent项目
<modelVersion>4.0.0</modelVersion>
<groupId>com.xiaoyetan</groupId> <!-- 项目组织唯一的标识符,实际对应JAVA的包的结构-->
<artifactId>basis-parent</artifactId>
<!--项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称-->
<packaging>pom</packaging>
<!--项目的打包类型:pom、jar、war -->
<!--pom:父类型都为pom类型-->
<version>1.1.9</version>
<parent>
<!--通过parent指定父项目-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.19.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modules>
<!--通过modules来指定该父项目下面的子模块-->
<module>eureka-server</module>
</modules>
<properties>
<!--定义属性变量,可以在后面的标签中使用-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR5</spring-cloud.version>
</properties>
<dependencies>
<!--指定项目所需的依赖的jar包-->
<!--父项目如果直接引用的依赖,子项目可以直接使用-->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<!--通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.xiaoyetan</groupId>
<artifactId>basis-library</artifactId>
<version>1.1.8</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<!--编译测试部署打包 额外配置-->
<!--打包后的项目名-->
<finalName>gateway-server</finalName>
<!--构建结果所在路径 默认为${basedir}/target-->
<directory>${basedir}/target</directory>
<!-- 插件-->
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!--maven-compiler-plugin所使用的包或者编译时用的jdk-->
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<!--打包是跳过测试用例的-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
解析 dependencyManagement
其实就是通过在父项目的dependencyManagement的某些jar包版本(父项目不是真的引用,只是声明版本),然后在子项目中引入依赖时不需要指定版本(子项目中需要引入依赖)。 ==为了统一项目使用的jar的版本==。
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
解析build配置
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
子项目 eureka-server pom.xml
<modelVersion>4.0.0</modelVersion>
<!--子模块是不需要指定groupid的-->
<artifactId>eureka-server</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>eureka-server</name>
<description>服务注册中心</description>
<parent>
<!--指定父项目-->
<groupId>com.xiaoyetan</groupId>
<artifactId>basis-parent</artifactId>
<version>1.1.9</version>
</parent>
<dependencies>
<!--不指定依赖的jar版本,maven会去父项目找-->
<dependency>
<groupId>com.xiaoyetan</groupId>
<artifactId>basis-library</artifactId>
</dependency>
</dependencies>
<build>
<finalName>eureka-server</finalName>
<plugins>
<plugin>
<!--能够将Spring Boot应用打包为可执行的jar或war文件-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<!-- 部署时是否跳过该项目 -->
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
maven 命令----lifecycle
mvn clean
清除target目录下的之前打好的jar包或者是war包
mvn compile
编译maven包
在命令行输入mvn compile后,maven就会自动帮我们下载依赖jar,为代码生成字节码文件等。我们把这个过程称为 编译
mvn test
在命令行输入 mvn test 项目会新增surefire-reports(测试报告) 、 test-classes(测试类字节码)两个文件夹。我们把这个过程称为 测试。
mvn package
打包。 ==最后打包的格式根据pom文件中指定的==
mvn install
==把生成的jar/war包复制到本地repository==
mvn deploy
把生成的jar/war包发送到远程repository,如果是父子模块,哪些包是否upload是由项目pom中build-deploy配置来的(建议配置了私服,那就是往私服发送了)
其他 命令行参数
跳过测试
mvn test -Dmaven.test.skip=true
mvn clean package
清理再打包
mvn clean install
清理打包后再把包复制到本地仓库
mvn clean deploy
清理打包后再把包上传到远程私服,记住如果当前版本存在了是upload不成功的。 如果deploy 不成功,自己查找原因。