文章目录
- pom 文件中 build 的配置说明
- maven
- 问题[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! 解决方法
- mac maven 安装、配置阿里源
- mavn 打包spring boot 项目报错 no main manifest attribute
- maven 常用标签总结
- maven 配置maven-shade-plugin插件生成可执行的jar
- Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin:<unknown>
- maven 打包中跳过测试阶段
- maven 解决依赖冲突
- maven 插件中文乱码问题
pom 文件中 build 的配置说明
对mavne 的功能说明
1首先 使用maven 构建项目均可以通过 maven build 来完成项目的编译测试和打包。无需额外的配置。
2 maven 是通过 pom.xml 来完成任务的。build 标签描述了如何来编译和打包项目,而居的编译和打包工作是通过build 中配置plugin 来完成的。当然 plugin 配置不是必须的。
build 标签说明
- resources,build过程中涉及的资源文件
maven
问题[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! 解决方法
问题描述
intellij 初始化的工程,在install 阶段出现了问题。
产生原因
properties
属性列表。定义的属性可以在 pom.xml 文件中任意处使用。使用方式为 ${propertie} 。
解决方法
<project>
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
</project>
问题2 JAR will be empty - no content was marked for inclusion!
package xxx does not exist
产生原因
如果是配置了私服的话就会导致这个问题。
如果是私服的话需要修改本地存储路径
修改为本地存储路径解决。
maven 中的 scope 的作用
今天在做项目开发的时候发现了,在使用H2数据库的时候maven 有个scope 标签之前从来没有接触过。所以特意的来总结一下。
1 maven 中scope 标签的作用是什么?
Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项中,scope的默认值是compile,项目中经常傻傻的分不清,直接默认了。今天梳理一下maven的scope。
compile
默认就是compile,什么都不配置也就是意味着compile。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。
runntime
runntime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已,说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSR×××的实现,对应的API jar是compile的,具体实现是runtime的,compile只需要知道接口就足够了。Oracle jdbc驱动架包就是一个很好的例子,一般scope为runntime。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。
mac maven 安装、配置阿里源
官网地址
http://maven.apache.org/
2 选择下载第一个 结尾是 tar.gz格式的文件。
3 下载好找个熟悉的地方放好
4 在终端输入:vim ~/.bash_profile 或者 vi ~/.bash_profile 打开.bash_profile文件
输入
export M2_HOME=/Users/XXXXX/Documents/apache-maven-3.8.1
export PATH=$PATH:$M2_HOME/bin
XXXXX 需要自己替换成自己的。
source ~/.bash_profile
mvn -v
查看安装成功
5 配置阿里云镜像
添加本地仓库存储
<localRepository>/Users/wangrui/Documents/apache-maven-3.8.1/repository/anialy-repo</localRepository>
修改镜像地址
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</mirrors>
查看以下repository 中的文件。验证安装配置是否成功。
mavn 打包spring boot 项目报错 no main manifest attribute
no main manifest attribute 解决
Spring Boot的Maven插件Spring Boot Maven plugin
作用:Spring Boot Maven plugin能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。
使用场景:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- ... -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
可以通过以下配置使用不同的插件版本。
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
- Spring Boot Maven plugin的5个Goals
spring-boot:repackage,默认goal。在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.origin
spring-boot:run,运行Spring Boot应用
spring-boot:start,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
spring-boot:stop,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
spring-boot:build-info,生成Actuator使用的构建信息文件build-info.properties
解决方法
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
插入以上代码片段到pom 文件中即可。
maven的几种常见的打包方式vs springboot 的打包工具
首先 任何一个maven 项目都需要指定 POM元素 packaging (如果不写的话默认是jar) ,顾名思义,该元素决定了项目的打包方式。
如果我们定义了该元素为 war 最后我们将会得到一个war 包;如果定义值为POM(比如说一个父模块),那么什么包都不会生成。
maven 自己有几种打包的方式:
maven-jar-plugin
: jar 项目的默认打包方式,默认情况下只会将项目源码编译生成的class 文件和资源文件打包进来,不会打包进项目依赖的所有jar包。
maven-assembly-plugin
:需要在pom文件的plugin元素中引入才可以使用,功能非常强大,是maven中针对打包任务而提供的标准插件。它是Maven最强大的打包插件,它支持各种打包文件格式,包括zip、tar.gz、tar.bz2等等,通过一个打包描述文件设置(src/main/assembly.xml),它能够帮助用户选择具体打包哪些资源文件集合、依赖、模块,甚至本地仓库文件,每个项的具体打包路径用户也能自由控制。
maven-shade-plugin
需要在pom文件的plugin元素中引入才可以,可以让用户自定义mainclass的值,然后在打包的时候关于项目的依赖,它很聪明地将依赖的JAR文件全部解压后,再将得到的.class文件连同当前项目的.class文件一起合并到最终的CLI包(可以直接运行的jar包)中,这样,在执行CLI JAR文件的时候,所有需要的类就都在Classpath中了。
插件的选择
- 如果开发一个类库 直接使用默认的
moven-jar-plugin
插件即可; - 如果是开发一个应用程序的时候可以考虑使用maven-shade-plugin 打包生成的jar 这个jar 中包含了应用程序以来的所有库和二进制包。
- 如果shade 的包不能满足需求使用
maven-assembly-plugin
插件自定义打包内容。
pringBoot的spring-boot-maven-plugin插件的打包功能
在maven中提供了对springboot 的支持,可以帮助我们打包出可执行的 jar包或者是war 包。 spring-boot-maven-plugin 所做的工作是在默认的maven-jar-plugin插件打包结束后,将项目依赖的 jar 包中的 .class
文件重新打包。
maven 常用标签总结
<dependencyManagement> 标签 和 demendencies 的区别
dependencies : 自动引入声明在dependencies 里面所有的依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目
继承(属性全部继承) 声明在父项目dependencies 里面的依赖项
dependencymanagement 里面只是声明依赖,并不实现引入,因此子项目需要显示的声明需要的依赖。如果不在子项目中声明依赖。
maven 配置maven-shade-plugin插件生成可执行的jar
默认打包生成的jar是不能直接运行的,因为带有main方法的信息不会添加到mainifest中,需要借助maven-shade-plugin
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>shade</goal></goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>Jsoup.JsoupTest</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
如果你有一个main函数,可以通过调用java -jar yourjar.jar运行时,只需要在插件配置中加入一句话:例如:
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.demo.main</mainClass>
</transformer>
maven-assembly-plugin 插件作用
就是用来帮助打包用的,比如说打出一个什么类型的包,包里包括哪些内容等等。
Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin:<unknown>
缺失版本号,添加版本号即可。
maven 打包中跳过测试阶段
mvn clean install -DskipTests
maven 解决依赖冲突
mvn dependency:tree
通过tree中的包手动排除冲突的jar包
maven 插件中文乱码问题
使用maven-javadoc-plugin生成中文文档时,IDEA控制台中文乱码,File | Settings | Build, Execution, Deployment | Build Tools | Maven | Runner在VM Options中添加-Dfile.encoding=GBK,,切记一定是GBK。即使用UTF-8的话,依然是乱码,这是因为Maven的默认平台编码是GBK,如果你在命令行中输入mvn -version的话,会得到如下信息,根据Default locale可以看出
PS D:\risingauto\workspace\bda-portal> mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\apache-maven-3.6.3\bin\..
Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_201\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
PS D:\risingauto\workspace\bda-portal>