目录
■命令
■前提理解
■扩展
1.使用纯命令行,java命令进行打包
2.pom.properties
3.在Eclipse中,【実行構成】创建文件(.launch),保存每次执行的Maven命令。
■命令行执行的前提条件
■maven的目录结构(略)
■settings.xml文件
■命令行执行 --- 重点 !!! 很常用 !!!
关于 maven-surefire-plugin
■环境差异文件做成
■环境差异文件做成---WAR时的配置文件
pom中 使用 maven-war-plugin 时,添加web.xml的配置
■mvn命令的,更多参数设置
■.更多命令组合 clean package install
■使用到的插件
■其他
●生成的文件
●注意点:maven运行时
●注意点 :mvn的命令语法
●Devops 相关
●Scope :provided
●如何指定pom文件
●maven的目录结构
■setting.xml配置文件 --- user.home
=================
后面整理的内容比较杂乱,直接把命令放到最前面
set path=c:\java\bin;c:\maven\bin;%path%
cd c:\AAA\BBB\YourMavenProject
mvn clean package -Dmaven.test.skip=true --settings c:\dev\.m2\setttings.xml -P profileId
===
===
・Maven的Pom文件
・Eclipse中创建Maven工程,
・Eclipse中、使用注意点
・Eclipse中创建Maven工程
Maven的Pom文件 ( Eclipse中创建Maven工程, 使用注意点,DevOps相关)_sun0322-CSDN博客
・DevOps相关
DevOps使用到的工具・术语_sun0322-CSDN博客
・Maven 帮助文档
Maven的帮助文档ー查看各个插件的作用--- 【maven-assembly-plugin】_sun0322-CSDN博客_assembly 插件作用
===
=====================
java使用纯命令行打包项目 - bf378 - 博客园
1.1.javac -d // 指定,编译之后的class文件的,输出目录
javac -d myclassPackage
@sources
.txt
1.2.创建jar包可以使用jar -cvf jarname.jar myclassPackage
文件夹 即可打包1
sources
.txt
对于多个包下面的源码编译,貌似javac不支持迭代编译,可能需要一次传入多个源码位置进行编译。
使用java的java 命令,直接调用执行class文件_sun0322-CSDN博客_java 执行class
Maven中的pom.properties文件_sun0322-CSDN博客_pom文件properties
文件后缀【XXXX.launch】
(目录所在【工程文件夹】---【.settings】---XXXX.launch)
=====================
・Maven工程(有pom文件)
・JDK安装
对应的bin,设置到环境变量path中
・Maven安装
对应的bin,设置到环境变量path中
・镜像库已经设置好(repository)
・对应的setting.xml已经设置好(镜像库对应的文件)
%MAVEN_HOME%
└bin
└mvn.cmd
└conf
└settings.xml //镜像库等情报
↑ 命令行执行时,如果不指定,默认使用此配置文件
快速搭建开发环境(Vs Code)_sun0322-CSDN博客
0.如果不在环境变量path中设置,
也可以在命令行窗口打开之前设置 set path=%JAVA_HOME%\bin;%MAVEN_HOME%bin;%path%
1. cd C:\XXX\工程目录下
pom文件一般都在工程目录下面
2.运行下面命令 指定settings.xml
mvn clean package --settings c:\dev\.m2\setttings.xml
跳过测试
set path=c:\java\bin;c:\maven\bin;%path%
mvn clean package -Dmaven.test.skip=true --settings c:\dev\.m2\setttings.xml -P profileId
// -Dmaven.test.skip=true
// 对应的插件 【maven-surefire-plugin】 不被执行
//
--------------------------------------------
在默认情况下,maven-surefire-plugin的test目标会自动执行测试源码路径(默认为src/test/java/)下所有符合一组命名模式的测试类。这组模式为:
**/Test*.java:任何子目录所有命名以Test开头的Java类。
**/*Test.java:任何子目录下所有命名以Test结尾的Java类。
**/*TestCase.java:任何子目录下所有命名以TestCase结尾的Java类。
--------------------------------------------
=========================================================
・略
src/main/resources
true
...
・複雑
src/main/resources
**/*
false
${basedir}/target/classes
src/main/resources
XXX.properties
true
${basedir}/target/classes
src/main/resources/AAA/BBB/
XXX.jsp
true
${basedir}/target/classes/AAA/BBB/
...
mvn clean package依次执行了clean、resources、compile、
Maven中profile和filtering实现多个环境下的属性过滤_极客on之路-CSDN博客
Spring boot 相关
xml文件中无法获取pom.xml文件中的属性_seriousboy的博客-CSDN博客
由于 ${} 方式会被maven处理。
如果你的pom继承了spring-boot-starter-parent,
SpringBoot会将maven-resources-plugins默认的${}方式改为了@@方式,
如@name@,此时若要使用${}取值则需在pom.xml文件中添加如下配置:
===
// 方式一
maven-resources-plugin
utf-8
true
// 方式二
@
false
// 将false 改为true
=========================================================
===
org.apache.maven.plugins
maven-war-plugin
3.2.3
${project.build.directory}/${project.build.finalName}
${basedir}/src/main/webapp/WEB-INF/web.xml
${basedir}/src/main/webapp/static
/static
${basedir}/src/main/resources
**/*.properties
/WEB-INF/classes
===
其中,
标签用于配置 web 资源文件,可以通过 标签添加多个资源目录或文件,并可以指定目标路径。在上面的示例中,分别配置了 src/main/webapp/static 目录和 src/main/resources 目录下的 .properties 文件作为 web 资源文件。
上面代码中 可以替换成 吗
可以,但是,这取决于上下文。一般来说,在 Maven 的 POM 文件中,元素名应该是
,因为它用于指定项目中的资源文件(如配置文件、属性文件等)。而 通常用于指定 Web 应用程序中的资源文件(如 HTML、CSS、JavaScript 文件等)。因此,如果你正在编写 Maven 的 POM 文件,并且想指定项目中的资源文件,那么应该使用 元素。如果你正在编写 Web 应用程序的 Maven POM 文件,并且想指定 Web 应用程序中的资源文件,那么应该使用 元素。
====
=========================================================
mvn -help 查看
-f 指定 pom.xml文件位置
-B Batch-mode; // 可以避免等待人工参数入力,造成的挂起现象
-s, --settings
mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
mvn clean deploy依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。
package命令完成了项目编译、单元测试、打包功能
install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库
deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
执行顺序:
1、使用清理插件:maven-clean-plugin:执行清理删除已有target目录;
2、使用资源插件:maven-resources-plugin:执行资源文件的处理;
3、使用编译插件:maven-compiler-plugin:编译所有源文件生成class文件至target\classes目录下;
4、使用资源插件:maven-resources-plugin:执行测试资源文件的处理;
5、使用编译插件:maven-compiler-plugin:编译测试目录下的所有源代码;
6、使用插件:maven-surefire-plugin:运行测试用例;
在targer目录下面,会生成surefire-reports文件夹,当然,前提是不跳过Junit的执行
surefire-reports
└TEST-*.xml // 测试结果文件
7、使用插件:maven-jar-plugin:对编译后生成的文件进行打包,
包名称默认为:artifactId-version.jar,
包文件保存在target目录下
■更多插件
7.1.maven-jar-plugin,默认的打包插件,用来打普通的project JAR包;
7.2.maven-shade-plugin,用来打可执行JAR包,也就是所谓的fat JAR包;
7.3.maven-assembly-plugin,支持自定义的打包结构,也可以定制依赖项等。
// 使用 maven-assembly-plugin 可以生成zip文件
■maven-assembly-plugin
delply
xxxx.xml
■maven-assembly-plugin 相关的更多介绍
Maven的帮助文档ー查看各个插件的作用--- 【maven-assembly-plugin】_sun0322-CSDN博客_assembly 插件作用
===
mvn -v //查看版本
mvn -version //查看版本
mvn archetype:create //创建 Maven 项目
mvn compile //编译源代码
mvn test-compile //编译测试代码
mvn test //运行应用程序中的单元测试
mvn site //生成项目相关信息的网站
mvn package //依据项目生成 jar 文件
mvn install //在本地 Repository 中安装 jar
mvn -Dmaven.test.skip=true //忽略测试文档编译
mvn clean //清除目标目录中的生成结果
mvn clean compile //将.java类编译为.class文件
mvn clean package //进行打包
mvn clean test //执行单元测试
mvn clean deploy //部署到版本仓库
mvn clean install //使其他项目使用这个jar,会安装到maven本地仓库中
mvn archetype:generate //创建项目架构
mvn dependency:list //查看已解析依赖
mvn dependency:tree //看到依赖树
mvn dependency:analyze //查看依赖的工具
mvn help:system //从中央仓库下载文件至本地仓库
mvn help:active-profiles //查看当前激活的profiles
mvn help:all-profiles //查看所有profiles
mvn help:effective -pom //查看完整的pom信息
生成的文件保存在下面的位置
C:\XXX\工程目录下
└target
每次clean执行时,会直接把target文件夹删除掉,
然后再新建一个target文件夹,
执行打包命令时,不要打开target文件夹,
不然会出错,说创建target文件失败。
mvn clean package
没有 「-」,错误写法 mvn -clean
DevOps使用到的工具・术语_sun0322-CSDN博客
Maven Dependency Scope用法-provided
Maven Dependency Scope用法 - ergexy - 博客园
pom文件中,引用jar时的,scope
javax.servlet
servlet-api
2.5
provided
・compile
默认的scope,
表示 dependency 都可以在生命周期中使用。
会打入到jar包里面的lib中
・provided
只在编译时使用,
不会将包打入本项目中。
・runtime
表示dependency不作用在编译时,但会作用在运行和测试时
===
关于Maven scope 为provided时,依赖的jar包依然被打入了项目的lib中_SuperForceQiang的博客-CSDN博客_配置了provided仍然能打进包内
・compile:默认值。compile表示对应依赖会参与当前项目的编译、测试、运行等,是一个比较强的依赖。打包时通常会包含该依赖,部署时会打包到lib目录下。比如:spring-core这些核心的jar包。
・provided:provided适合在编译和测试的环境,和compile功能相似,但provide仅在编译和测试阶段生效,provide不会被打包,也不具有传递性。比如:上面讲到的spring-boot-devtools、servlet-api等,前者是因为不需要在生产中热部署,后者是因为容器已经提供,不需要重复引入。
・runtime:仅仅适用于运行和测试环节,在编译环境下不会被使用。比如编译时只需要JDBC API的jar,而只有运行时才需要JDBC驱动实现。
・test:scope为test表示依赖项目仅参与测试环节,在编译、运行、打包时不会使用。最常见的使用就是单元测试类了。
・system:system范围依赖与provided类似,不过依赖项不会从maven仓库获取,而需要从本地文件系统提供。使用时,一定要配合systemPath属性。不推荐使用,尽量从Maven库中引用依赖。
・import: import scope只能用在dependencyManagement里面。表示从其它的pom中导入dependency的配置
===
mvn -f profect1/pom.xml
是apache的项目
PS C:\Program Files\apache-maven-3.6.3> tree /A /F
C:.
| LICENSE
| NOTICE
| README.txt
|
+---bin
| m2.conf
| mvn
| mvn.cmd
| mvnDebug
| mvnDebug.cmd
| mvnyjp
|
+---boot
| plexus-classworlds-2.6.0.jar
| plexus-classworlds.license
|
+---conf
| | settings.xml
| | toolchains.xml
| |
| \---logging
| simplelogger.properties
|
\---lib
| cdi-api-1.0.jar
| cdi-api.license
| commons-cli-1.4.jar
| commons-cli.license
| commons-io-2.5.jar
| commons-io.license
| commons-lang3-3.8.1.jar
| commons-lang3.license
| guava-25.1-android.jar
| guava.license
| guice-4.2.1-no_aop.jar
| guice.license
| jansi-1.17.1.jar
| jansi.license
| javax.inject-1.jar
| javax.inject.license
| jcl-over-slf4j-1.7.29.jar
| jcl-over-slf4j.license
| jsoup-1.12.1.jar
| jsoup.license
| jsr250-api-1.0.jar
| jsr250-api.license
| maven-artifact-3.6.3.jar
| maven-builder-support-3.6.3.jar
| maven-compat-3.6.3.jar
| maven-core-3.6.3.jar
| maven-embedder-3.6.3.jar
| maven-model-3.6.3.jar
| maven-model-builder-3.6.3.jar
| maven-plugin-api-3.6.3.jar
| maven-repository-metadata-3.6.3.jar
| maven-resolver-api-1.4.1.jar
| maven-resolver-connector-basic-1.4.1.jar
| maven-resolver-impl-1.4.1.jar
| maven-resolver-provider-3.6.3.jar
| maven-resolver-spi-1.4.1.jar
| maven-resolver-transport-wagon-1.4.1.jar
| maven-resolver-util-1.4.1.jar
| maven-settings-3.6.3.jar
| maven-settings-builder-3.6.3.jar
| maven-shared-utils-3.2.1.jar
| maven-slf4j-provider-3.6.3.jar
| org.eclipse.sisu.inject-0.3.4.jar
| org.eclipse.sisu.inject.license
| org.eclipse.sisu.plexus-0.3.4.jar
| org.eclipse.sisu.plexus.license
| plexus-cipher-1.7.jar
| plexus-cipher.license
| plexus-component-annotations-2.1.0.jar
| plexus-component-annotations.license
| plexus-interpolation-1.25.jar
| plexus-interpolation.license
| plexus-sec-dispatcher-1.4.jar
| plexus-sec-dispatcher.license
| plexus-utils-3.2.1.jar
| plexus-utils.license
| slf4j-api-1.7.29.jar
| slf4j-api.license
| wagon-file-3.3.4.jar
| wagon-http-3.3.4-shaded.jar
| wagon-provider-api-3.3.4.jar
|
+---ext
| README.txt
|
\---jansi-native
| README.txt
|
+---freebsd32
| libjansi.so
|
+---freebsd64
| libjansi.so
|
+---linux32
| libjansi.so
|
+---linux64
| libjansi.so
|
+---osx
| libjansi.jnilib
|
+---windows32
| jansi.dll
|
\---windows64
jansi.dll
---
maven的配置文件settings.xml存在于两个地方:
1.安装的地方:${M2_HOME}/conf/settings.xml
2.用户的目录:${user.home}/.m2/settings.xml
mvn -Duser.home=/XXX/XXXX/AAA/mvn
// 这时,使用【/XXX/XXXX/AAA/mvn/.m2/】目录下的 setting.xml 文件
前者又被叫做全局配置,对操作系统的所有使用者生效;
后者被称为用户配置,只对当前操作系统的使用者生效。
如果两者都存在,它们的内容将被合并,并且用户范围的settings.xml会覆盖全局的settings.xml。
---
↓搜索【user.home】
工作中使用到的单词(软件开发)_sun0322-CSDN博客
---