maven总结

27 篇文章 0 订阅

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>
  1. 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> 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值