下载 安装
Maven安装配置 https://blog.csdn.net/m0_63684495/article/details/129046405
官网 https://maven.apache.org/download.cgi
下载 https://archive.apache.org/dist/maven/maven-3/
Maven-3.9.6下载 https://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.zip
Maven-3.8.1下载 https://archive.apache.org/dist/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.zip
maven版本查询 https://mvnrepository.com/
springboot 打包插件spring-boot-maven-plugin打包机制及内部结构分析
https://blog.csdn.net/iss_jin/article/details/122463390
Maven 打 Jar 包体积缩小100倍 https://mp.weixin.qq.com/s/qniPev0onMfmPzxigB5MaA
多个子module项目相互依赖,提示程序包不存在 https://blog.csdn.net/qq_60390518/article/details/131432348
IDEA创建Maven工程;部署Web项目运行到tomcat下
<targetPath> 是指将文件输出到的位置(默认target/classes目录)
<directory> 是指将指定的目录打包
<includes> 将<directory>这个目录中指定包含哪些文件进行打包
<exclude> 将<directory>这个目录中指定排除哪些文件(打包不加入)
<filtering> 结合<filters>指定过滤替换
${project.build.directory} 指构建目录,即target目录
${basedir} 项目的根目录
dependenceManagement
Maven的dependencyManagement是一种机制,允许你在父POM(Project Object Model)中定义依赖的版本和配置,而不实际引入这些依赖。子项目可以选择性地继承这些依赖,并使用父POM中定义的版本和配置。通过这种方式,你可以统一管理项目中所有模块的依赖版本,避免版本冲突和不一致。
https://blog.csdn.net/xycxycooo/article/details/141220290
<dependencyManagement>
<dependencies>
<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>
scope定义了类包在项目的使用阶段。项目阶段包括: 编译,运行,测试和发布。
runtime ??
Maven打包
Maven构建分布式项目时子模块相互依赖打包技巧
<build>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- Java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- maven打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
properties
指明JDK版本
在使用 spring-boot-maven-plugin 插件进行打包操作的时候强烈建议指明JDK版本,不然可能在使用了一些Java8新特性的时候可能受到类似不识别Lambda,请使用Resource8这样的错误。
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
resources
maven profile <filtering>true</filtering>的作用
<!-- 定义包含这些资源文件,能在jar包中获取这些文件 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<!--是否替换资源中的属性-->
<filtering>false</filtering>
</resource>
</resources>
Maven安装
maven本地部署后,环境变量配置完成后,检验maven的配置是否生效或正确
1.在控制台输入 mvn help:system 系统下载更新包
2.当控制台出现build success时,说明配置生效或正确。这样本地仓库就配置成功了
3.添加阿里云https镜像
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
Maven基础 属性说明
Profiles
mvn package -P dev
https://blog.csdn.net/fox_bert/article/details/85641251
https://segmentfault.com/a/1190000015251264
maven profiles 配置
<profiles>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
</profiles>
<build>
<resources>
<resource>
<directory>src/main/resources/profile/${env}</directory>
</resource>
</resources>
</build>
Properties
Maven总共有6类属性,内置属性、POM属性、自定义属性、Settings属性、java系统属性和环境变量属性;
relativePath
relativePath:
1)指定查找该父项目pom.xml的(相对)路径。默认顺序:relativePath > 本地仓库 > 远程仓库
2)没有relativePath标签等同…/pom.xml, 即默认从当前pom文件的上一级目录找
3)表示不从relativePath找, 直接从本地仓库找,找不到再从远程仓库找
scope
scope定义了类包在项目的使用阶段。项目阶段包括: 编译,运行,测试和发布。
runtime ??
maven- compiler-plugin
Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven- compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码。
Maven 命令
- clean 清除编译
- compile 编译
- test 编译并测试
- install 打包并发送到本地仓库
- package 只是打成jar包,并不会发送到本地仓库
sourceDirectory
<packaging>war</packaging>
<!--项目产生的构件类型,例如jar、war、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型 -->
jar代表生成jar文件,war代表打包的是war文件,意思就是说是一个web程序
<!--项目的名称, Maven产生的文档用 -->
<name>mypro02 Maven Webapp</name>
<!--项目主页的URL, Maven产生的文档用 -->
<url>http://maven.apache.org</url>
清除与编译
clean清除编译,compile编译,test编译并测试,install 打包并发送到本地仓库,package 只是打成jar包,并不会发送到本地仓库
webcontent 目录 和 webapp 两个目录什么区别 ?
http://bbs.csdn.net/topics/390686693
因为你新建的时候选择了war,在最后又自己填写了发布路径为webapp作为路径,所以maven根据自己的模板mavne-archetype-webapp生产的工程 所以满足了maven web工程结构要求,自然就不会有了,如果你开始你没有选择mavne-archetype-webapp,而是直接就建立了maven工程那么在转换成web工程时是web插件转化的,所以会出现所谓的webContent,其实这样不符合maven web工作结构,那个可以复制到webapp中然后删除即可。
关于artifact、war、jar、war exploded
https://blog.csdn.net/weixin_45783996/article/details/107967737
intellij中Project Structure中的artifacts到底是什么?
官方定义是这样的:
An artifact is an assembly of your project assets that you put together to test, deploy or distribute your software solution or its part. Examples are a collection of compiled Java classes or a Java application packaged in a Java archive, a Web application as a directory structure or a Web application archive, etc.
翻译过来就是项目资产的组装 ,反正我的理解就是打包方式,像jar、war、war exploded的ar两个字母就是artifact的意思,就是说编译后的Java类,Java应用,Web应用等资源,要用来测试或者部署的时候,该如何打包。某个module有了 Artifacts 就可以部署到应用服务器中了(比如在部署步骤中选择的就是artifacts里面的artifact,当然也可以选择external source)。
jar和war又有什么区别呢?
定义区别:
jar:Java ARchive,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便分发Java平台应用软件或库;
war:Web application ARchive,一种JAR文件,其中包含用来分发的JSP、Java Servlet、Java类、XML文件、标签库、静态网页(HTML和相关文件),以及构成Web应用程序的其他资源;
exploded:在这里你可以理解为展开,不压缩的意思。也就是war、jar等产出物没压缩前的目录结构。建议在开发的时候使用这种模式,便于修改了文件的效果立刻显现出来。
问题 项目为什么要使用jar或war进行打包发布?使用场景区别是什么?
问题 为什么javaweb部署到服务器上的url默认为project文件名_war_exploded?
因为intellij默认帮我们设置的artifact是exploded类型的,那么改artifact的name就是project文件名:war exploded,那applicant context(也就是部署的目录,即项目根目录的路径)就默认为project文件名_war_exploded,当然这个可以自由改动。
问题 javaweb中的output path已经设置成了WEN-INF下面的classes文件夹,那么out文件夹到底是用来干嘛的?
用来生成artifact,artifact目录下面默认是只有一个project文件名_war_exploded文件夹的,里面的结构和内容都与web(或者web-content?)文件夹一致。
但是也可以手动生成一个war包,这个网上也有教程,比如这里,然后部署,设置applicant context,然后访问。或者复制到tomcat的webapps文件夹下面,启动电脑上的tomcat服务器来访问。
链接:https://blog.csdn.net/weixin_45783996/article/details/107967737
问题
spring-boot-maven-plugin SpringBoot打jar包
IDEA中创建父子工程与maven打包Springboot聚合工程报错程序包不存在问题处理
https://www.cnblogs.com/adingfirstlove/p/13791549.html
与tomcat
idea开发web项目,路径localhost:8080后去除 项目名+_war_exploded 的方法
https://blog.csdn.net/qq_43588377/article/details/120203952
Could not open ServletContext resource [/WEB-INF/classes/spring/applicationContext.xml]
https://blog.csdn.net/wlwlwlwl015/article/details/48134763
由于在没用Maven之前,我的spring配置文件 applicationContext.xml是放在WEB-INF根目录下的,在项目运行时都是正常的;
重构成Maven项目之后,我的配置文件自然应该放在src下的resources文件夹下了,那么在web.xml中我自然将<init-param>中contextConfigLocation的参数值由WEB-INF/applicationContext.xml修改为classpath:applicationContext.xml了,那么启动tomcat之后依然报错,而且我们从报错信息中可以看出容器依然是在WEB-INF下去找applicationContext.xml,很明显这个文件的位置已经被我们改变了,而且我们也修改了web.xml的配置为何还要从这里去加载呢?原因是我们缺少另一个重要的配置。
遇到问题盲目搜索往往不能迅速得到有效的解决方案,所以我们先从官方去寻找线索,看一看spring的官方文档,在The Web的章节中可以发现这样一段话:
简单翻译一下上图标记的小段落:如果不特意指定参数名为contextConfigLoction的<context-parameter>元素,那么spring的ContextLoderListener监听器就会在/WEB-INF/下去寻找并加载该目录下的名为applicationContext.xml这个文件。So,我们应该在web.xml中添加<context-param>标签并再次指定spring核心文件的位置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
maven编译时出现There are test failures
解决方法:这是因为测试代码时遇到错误,它会停止编译。只需要在pom.xml的<project>里添加以下配置,使得测试出错不影响项目的编译。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build
链接:https://blog.csdn.net/u011134399/article/details/79103093
其他
在eclipse jee中创建Maven project并且转换为Dynamic web project
http://www.zuidaima.com/blog/1618162161323008.htm
打包证书DerInputStream.getLength(): lengthTag=111, too big
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
<!-- 过滤后缀为pem、pfx的证书文件 -->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>cer</nonFilteredFileExtension>
<nonFilteredFileExtension>pem</nonFilteredFileExtension>
<nonFilteredFileExtension>pfx</nonFilteredFileExtension>
<nonFilteredFileExtension>p12</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
参考资料
Maven依赖排除、禁止依赖传递、取消依赖的方法
https://www.cnblogs.com/junzi2099/p/14118936.html
Maven构建分布式项目时子模块相互依赖打包技巧
https://www.cnblogs.com/DJOSIMON/p/14891506.html
maven打包方式(多模块)
https://blog.csdn.net/sinat_28007043/article/details/119020056
关于maven打包时,没有将依赖包打进来的问题
https://blog.csdn.net/vcj1009784814/article/details/122963905
SpringBoot的repackage和Maven打包命令之间的区别
https://www.jdon.com/55548
无法加载本地jar包以及maven项目打包后本地jar包没有打进项目的问题
https://blog.51cto.com/eguid/2976781
<!-- <!–打包插件,在Jar包中添加Class-Path和Main-Class–>-->
<!-- <plugin>-->
<!-- <groupId>org.apache.maven.plugins</groupId>-->
<!-- <artifactId>maven-jar-plugin</artifactId>-->
<!-- <version>3.0.2</version>-->
<!-- <configuration>-->
<!-- <archive>-->
<!-- <!–使用自己的Manifest文件,运行正常–>-->
<!-- <!–<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>–>-->
<!-- <!–使用插件添加的Manifest文件,运行正常,一定要注意Manifest中jar包名称和lib文件夹下jar包名称版本号后缀等一定要一致,否则找不到依赖jar,此处有坑–>-->
<!-- <manifest>-->
<!-- <addClasspath>true</addClasspath>-->
<!-- <!–指定依赖资源路径前缀–>-->
<!-- <classpathPrefix>lib/</classpathPrefix>-->
<!-- <mainClass>cn.codepub.maven.test.Main</mainClass>-->
<!-- </manifest>-->
<!-- <!–可以把依赖本地系统的Jar包加入Manifest文件中–>-->
<!-- <!–<manifestEntries>-->
<!-- <Class-Path>lib/lucene-1.0.0-SNAPSHORT.jar</Class-Path>-->
<!-- </manifestEntries>–>-->
<!-- </archive>-->
<!-- </configuration>-->
<!-- </plugin>-->
<!-- <plugin>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-maven-plugin</artifactId>-->
<!-- <version>${spring-boot.version}</version>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <phase>none</phase>-->
<!-- <goals>-->
<!-- <goal>repackage</goal>-->
<!-- <goal>build-info</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- <configuration>-->
<!-- <classifier>exec</classifier>-->
<!-- </configuration>-->
<!-- </plugin>-->
<!-- <plugin>-->
<!-- <groupId>org.apache.maven.plugins</groupId>-->
<!-- <artifactId>maven-dependency-plugin</artifactId>-->
<!-- <version>3.3.0</version>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <id>copy-dependencies</id>-->
<!-- <phase>prepare-package</phase>-->
<!-- <goals>-->
<!-- <goal>copy-dependencies</goal>-->
<!-- </goals>-->
<!-- <configuration>-->
<!-- <outputDirectory>${project.build.directory}/lib</outputDirectory>-->
<!-- <overWriteReleases>false</overWriteReleases>-->
<!-- <overWriteSnapshots>false</overWriteSnapshots>-->
<!-- <overWriteIfNewer>true</overWriteIfNewer>-->
<!-- <excludeTransitive>false</excludeTransitive>-->
<!-- <stripVersion>false</stripVersion>-->
<!-- </configuration>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- </plugin>-->
Jar包 引用相关
SpringBoot热部署配置
SpringBoot热部署配置 https://blog.csdn.net/key915/article/details/118209823
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
使用spring-boot-configuration-processor生成配置文件说明
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
原理
SpringBoot项目生成的jar包内包含有配置属性详细信息的元数据文件(spring-configuration-metadata.json),这些文件能够为在配置application.yml或者application.properties时提供属性说明、默认值和自动补全。
大多数元数据文件是在编译时通过处理使用@ConfigurationProperties注解注释的类的所有属性自动生成的。与此同时,也可以指定格式手动编写一部分元数据,用于极端情况或者更高级的用法。
a
<!-- Guava:google公司开发的一款Java类库扩展工具包 https://blog.csdn.net/mouday/article/details/128827421 -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0-jre</version>
</dependency>
<!-- 计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现 -->
<dependency>
<groupId>org.gavaghan</groupId>
<artifactId>geodesy</artifactId>
<version>1.1.3</version>
</dependency>
b
一个用于在JSON序列化过程中忽略特定字段的Java库。这个库提供了@JsonIgnore注解,可以标记在类的字段上,以便在序列化为JSON字符串时忽略该字段。
<dependency>
<groupId>com.github.rkonovalov</groupId>
<artifactId>json-ignore</artifactId>
<version>1.0.8</version>
</dependency>
<!--java使用xstream实现xml文件和对象之间的相互转换-->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.11.1</version>
</dependency>
996

被折叠的 条评论
为什么被折叠?



