Maven

Maven

scope

说明

在Maven项目中,scope用于指定依赖的范围,它决定了Maven将在何时使用该依赖。Maven提供了几个scope,以下是各个scope的作用:

  1. compile

compile是Maven默认的scope,它表示该依赖将在编译、测试和运行时都可用。这意味着,该依赖将被包括在最终的构建产品中。

  1. provided

provided表示该依赖将只在编译和测试阶段可用,而在运行时不包含在构建产品中。通常,这个scope用于发布产品时,因为提供依赖项的服务器将负责提供该依赖项。

  1. runtime

runtime表示该依赖项将在运行时可用,但不会在编译时包含在构建产品中。它通常用于编写支持多种不同运行时的应用程序,例如Web应用程序在运行时需要Tomcat容器,但编译和测试时不需要。

  1. test

test表示该依赖项只会在测试中使用,而在运行时和编译期不会包含在构建产品中。这个scope通常用于测试框架、Mock对象和其他仅用于测试的库。

  1. system

system表示依赖项是在本地系统上找到的。这个scope在项目中极少使用,因为它要求手动设置路径,这使得该项依赖性难以共享或迁移。

  1. import

import表示该依赖项不是一个实际的依赖项,而是用于导入构建中的一个POM文件。这个scope在父POM文件中很常见。它让你可以在一个POM文件中声明依赖,而另一个POM文件来管理这些依赖。

以上是Maven中的常用scope。通过合理使用这些scope,可以有效地管理Maven项目中的依赖项。

使用场景

下面针对Maven中常用的scope,给出它的使用场景和对应说明:

  • compile —- 编译、测试以及运行时都可用,默认

这是Maven默认的scope,表示该依赖将在编译、测试以及运行时都可用。通常情况下,编译时需要用到的依赖应该都在该scope下。这些依赖的JAR文件将被打包到最终的产品中。

  • provided — 编译和测试时,用于开发独立的工具,当在实际使用时会依赖于相关环境

provided表示该依赖项将在编译和测试阶段需要,但在运行时不会包含在构建产品中。比如,Web应用程序可能需要Servlet API或者JSP API,但是在运行时该API已经被Web容器提供了,所以不再需要在构建产品中包含这些API。所以,这个scope通常用于在编译和测试时,为开发者提供它们需要的依赖项。

  • runtime — 编译无,运行时有,(Tomcat容器 提供运行时环境,web应用程序就不需要打包到产品中)

runtime表示该依赖项将只在运行时可用,而不会在编译时含在构建产品它通常被用于那些只在特定运行时(如Tomcat、JBoss)下使用的依赖包,这些依赖包在编译阶段是不包含在构建产品中的。

  • test — junit测试时可用

test表示该依赖项仅用于测试,不会被包含在最终的构建产品中。它通常被用于JUnit测试、Mockito框架或者其他测试框架。在测试时需要的依赖项会在依赖图上找到该scope,但在编译或者运行时则不会被使用- system

system表示依赖项是在本地系统上找到的。个scope用于引用本地文件系统上存在的一些JAR文件。这种依赖项很少被用到,为这限制这性难以共享或迁移。

  • import – 父模块声明依赖,不引入

import表示该依赖项不是一个实际的依赖项,而是用于导入构建中的一个POM文件。这个scope通常用于父POM文件,方便多个子POM使用同一组依赖时,避免重复声明和维护。

通过正确使用上面的几种scope,可以帮助开发人员管理Maven项目中的依赖,避免依赖冲突和重复引用,同时也能提高构建速度,减少不必要的资源浪费。

runtime 特殊说明

runtime作为运行时环境,不需要打包到 Web应用程序,Web应用程序 依赖于 Web容器运行,Web容器提供运行时环境。

1
2
3
4
5
6
7
最终产品可以依赖于未打包的Jar包,是因为这些Jar包在运行时会被Web容器或应用服务器所提供,而不是被打包到最终产品中。

以Tomcat为例,假设在开发Web应用程序时,需要使用servlet-api和jsp-api等库。这些库可以通过Maven的runtime范围引用,而不用被打包到最终产品中。当Web应用程序部署到Tomcat中时,Tomcat本身提供了servlet-api和jsp-api等库,并将其加载到JVM中,Web应用程序就可以调用这些库。

另外,Web容器或应用服务器一般都有开放的类加载器机制,可以动态地加载和卸载依赖项。当Web应用程序部署到容器中时,容器会使用自己的类加载器来加载Web应用程序中的类和依赖项。这意味着,Web应用程序可以依赖于运行时范围的Jar包,即使这些Jar包在编译或部署时并未被打包到最终产品中。

综上所述,Web容器或应用服务器会提供运行时所需要的Jar包,Web应用程序可以依赖于这些未被打包的Jar包。这也是为什么在使用servlet-api、jpa-api等一些Web开发中常用的Jar包,是使用runtime作为依赖范围的原因,因为其在运行时就可以动态的加载,而不用被打包到最终产品中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Tomcat是一个开源的Web应用程序服务器,它是一个Web容器的实现。Web容器是一种应用程序服务器,提供了在计算机上运行Web应用程序所需的各种功能。

Web应用程序是Tomcat和其他Web容器的主要工作负载,它们被认为是Web容器的客户端。当Web应用程序被部署到Web容器中时,Web容器为其提供运行时环境,负责处理HTTP请求和响应、管理Web应用程序的生命周期和运行时状态以加载和卸载应用程序部署文件。

下面是Tomcat、Web容器和Web应用之间的关系:

1. Tomcat是一个开源的Web应用程序服务器,也是一个Web容器的实现。它提供了HTTP服务器和Servlet/JSP容器。

2. Web容器是一种应用程序服务器,为运行Web应用程序提供了支持,并负责处理HTTP请求和响应。Web容器还负责管理Web应用程序的生命周期,包括应用程序的启动、停止和重新部署。

3. Web应用程序是使用Web技术(如Servlet、JSP、HTML)开发的应用程序,可以在Web容器中运行。当Web应用程序被部署到Web容器中时,Web容器会为其提供运行时环境,并在运行时负责处理Web请求和响应。

4. 一个Web容器可以同时运行多个Web应用程序,每个Web应用程序有各自的上下文和配置文件,相互独立不会相互干扰。在Tomcat中,Web应用程序被部署为WAR文件,可以通过Tomcat的管理界面进行部署、停止和重新部署。

综上所述,Tomcat是一个Web应用程序服务器,也是Web容器的实现。Web容器是一种应用程序服务器,为Web应用程序提供了支持,而Web应用程序则是使用Web技术开发的应用程序,可以在Web容器中运行

Profile

Maven是一个功能强大的构建工具,可以轻松完成编译、测试、打包、发布等工作。在Maven中,可以通过Profile配置来针对不同的环境进行构建,例如开发、测试、生产等环境,方便我们在不同环境中使用不同的依赖库、配置文件等。

具体来说,Maven的Profile配置主要包括以下几个方面:

  1. profile的激活方式

在pom.xml文件中,使用标签来定义Profile,可以通过以下方式来激活Profile:

  • 手动指定:在mvn命令后加上-P参数,并指定Profile的名字;
  • 根据环境变量:使用环境变量来自动激活某个Profile,例如根据操作系统来激活某个Profile;
  • 根据属性值:在Profile中定义一个标签,并根据某个属性的值来激活Profile。
  1. profile的作用域

在Maven中,Profile的作用范围有以下三种:

  • (1)Project:在当前的项目中激Profile;
  • (2)Module:在当前的项目中激活Profile,并且只对特定的Module生效;
  • (3)Runtime:在运行时激活Profile。
  1. profile的配置内容

在Profile中,可以配置需要进行的所有操作,例如指定依赖库、修改配置文件、生成打包文件等。具体配置方式与在pom.xml文件中其他部分的配置一致,只需要将配置放在Profile标签中即可。

下面是一个Profile的示例代码,仅供参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<profiles>
<profile>
<id>dev</id>
; <activation>
<activeByDefault>true</activeByDefault>
<>
<>Windows 10</name>
<family>Windows</family>
<>x86_64</arch>
<version>10.0.19042</version>
</os>
</activation>
<properties>
<env>dev</env>
</properties>
<dependencies>
<>
<>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
</dependencies>
<>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<Id>maven-compiler-plugin</artifactId>
<>
<>1.8</source>
<>1.8</target>
</configuration>
</plugin>
<plugin>
<>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.demo.DemoApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>

在上面的示例代码中,我们定义了一个名为”dev”的,通过标签中定义的属性来自动激活该Profile。在Profile中,我们指定了依赖库和插件版本,同时还修改了spring-boot插件的配置。

总的来说,Maven的Profile配置可以帮助我们轻松地管理不同环境下的配置,提高开发效率并减少错误率。在实际的项目开发中,可以根据项目需要进行自定义配置,灵活应用Profile功能。

将项目发布至中央仓库

maven的配置

maven deploy命令的含义
maven deploy命令是将你负责的模块发布到你配置的仓库位置。

多模块开发中使用deploy命令
配置仓库位置,一般公司都会搭建自己的公司私服,用于加速获取jar以及管理公司的一些技术沉淀工具包之类的

1
2
3
4
5
6
7
8
9
10
11
12
<distributionManagement>
<repository>
<!--稳定版本不会频繁修改的jar的存储位置-->
<id>maven-release</id>
<url>http://XXXX/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<!--快照版本-->
<id>maven-snapshots</id>
<url>http://XXXX/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>

方案一:nexus

如何发布自己的项目到Maven中央仓库? - 腾讯云开发者社区-腾讯云 (tencent.com)

nexus

– 私服

方案二:Sonatype

来开源吧!发布开源组件到 MavenCentral 仓库超详细攻略 - 掘金 (juejin.cn)

1
2
3
4
5
6
7
8
9
10
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>

Sonatype

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
除了Nexus以外,Sonatype还推出了许多其他系列产品,这些产品都是为了辅助软件开发团队更好地管理和保护他们的软件供应链。下面是Sonatype的其他产品的介绍:

1. Nexus Lifecycle

Nexus Lifecycle是一款全流程的应用程序安全、治理和合规工具。它允许团队在构建应用程序时进行全面的风险评估,并为开发、运维、安全和合规工作提供综合的视图。

Nexus Lifecycle可以与Sonatype公有云服务结合使用,并拥有Sonatype收集的全球最大的代码库索引,这能帮助团队减少可潜在漏洞和软件质量问题的数量。

2. Nexus Firewall

Nexus Firewall是一款自动化的制止开源依赖组件中的漏洞和攻击工具。Nexus Firewall会防止有已知漏洞的组件进入代码库,这可以避免悲惨的安全事故,以及对供应链的伤害。

3. Nexus Repository Manager for Docker

Nexus Repository Manager for Docker是一款用于Docker映像的本地存储和管理工具,它允许用户在企业内部存储、跟踪和分发Docker映像。Nexus Repository Manager for Docker可以以本地方式使用,并且可以与Nexus Lifecycle和Nexus Firewall集成。

4. Nexus Repository Manager for npm

Nexus Repository Manager for npm是一款用于npm依赖项的本地存储和管理工具。该工具允许用户在自己的存储库中存储npm依赖项,并有效地跨团队使用这些依赖项。此外,Nexus Repository Manager for npm还可用于检测和修复有漏洞的依赖项。

5. Nexus Repository Manager for PyPI

Nexus Repository Manager for PyPI是一款用于Python包的本地存储和管理工具。它允许用户在企业内部存储、跟踪和分发Python包,并可以检测和修复有安全漏洞的包。

总的来说,Sonatype的其他产品都是为了解决软件供应链安全、合规和效率的问题,帮助开发团队更好地管理他们的软件供应链。[DONE]

具体业务

maven archetype

windows 不支持powerShell .

Linux :

1
mvn archetype:generate -DgroupId=com.wherezy.travel -DartifactId=travel-demo2 -Dversion=1.0.0-SNAPSHOT -Dpackage=com.wherezy.travle -DarchetypeArtifactId=cola-framework-archetype-web -DarchetypeVersion=4.3.0 -DarchetypeGroupId=com.alibaba.cola

启动spring 项目

1
2
3
4
5
6
7
使用`java -jar`命令可以启动一个包含主类的可执行的JAR文件。而使用`java -cp`命令可以指定类路径来运行Java程序。

下面是使用这两个命令的示例:

1. 使用`java -jar`命令启动JAR文件,并指定主类:
```shell
java -jar yourJarFile.jar com.example.MainClass

其中,yourJarFile.jar是您要启动的JAR文件的名称,com.example.MainClass是JAR文件中包含main方法的主类的完整类名。

  1. 使用java -cp命令指定类路径来运行Java程序,并指定主类:
    1
    java -cp yourClassPath com.example.MainClass
    其中,yourClassPath是包含所有依赖类的路径,多个路径之间使用冒号(Linux/Mac)或分号(Windows)分隔,com.example.MainClass是包含main方法的主类的完整类名。

请注意,使用java -jar命令时,JAR文件必须包含一个META-INF/MANIFEST.MF文件,并在其中指定主类。而使用java -cp命令时,您需要手动指定类路径,并确保所有依赖类都在类路径中。

如果您需要更详细的信息或遇到其他问题,请提供更多的上下文或错误信息,以便我能够更好地帮助您。

1
2
3
4
5
6
7
8
9
10
11
12





## mvn 为 spring boot 项目下载依赖

要使用Maven命令行下载根目录下pom.xml文件中定义的依赖项,可以按照以下步骤进行操作:

1. 打开命令行终端,并进入包含pom.xml文件的项目根目录。

2. 运行以下命令来下载并安装项目的依赖项:

mvn dependency:resolve

1
2
3
4
5
   这个命令会解析pom.xml文件中定义的依赖项,并下载它们到本地的Maven仓库中。

如果依赖项已经在本地仓库中存在,Maven将跳过下载过程。

3. 如果您还希望将依赖项复制到项目的特定目录中,可以运行以下命令:

mvn dependency:copy-dependencies
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   这个命令会将项目的依赖项复制到项目根目录下的`target/dependency`目录中。

您可以根据需要修改目标目录的路径。

请注意,执行上述命令需要在项目的根目录下存在有效的pom.xml文件,该文件描述了项目的依赖关系和其他配置信息。

使用Maven命令行下载依赖项可以在没有集成开发环境(IDE)的情况下进行依赖项的管理和下载。但是,使用IDE(如IntelliJ IDEA、Eclipse等)可以更方便地管理和下载依赖项,并提供更多的功能和工具支持。

如果您需要更详细的信息或遇到其他问题,请提供更多的上下文或错误信息,以便我能够更好地帮助您。





## 命令行 编译 spring boot 项目

要通过原始命令行使用mvn、jar、java、javac启动Spring Boot项目,可以按照以下步骤进行操作:

1. 确保你已经安装了Java开发工具包(JDK)并配置了Java环境变量。

2. 在项目的根目录下,使用命令行终端进入到项目的源代码目录。

3. 使用以下命令编译项目:

mvn compile
1
2
3
   这个命令会使用Maven编译项目的源代码,并将编译后的class文件输出到`target/classes`目录中。

4. 使用以下命令打包项目:

mvn package
1
2
3
   这个命令会使用Maven将项目打包成一个可执行的jar文件。打包完成后,你可以在项目的`target`目录下找到生成的jar文件。

5. 使用以下命令启动Spring Boot项目:

java -jar target/.jar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
   将`<jar-file-name>`替换为你的项目生成的jar文件的名称。

执行上述命令后,Java会启动Spring Boot应用程序,并在命令行中显示应用程序的日志输出。

请注意,执行上述步骤需要在项目的根目录下存在有效的`pom.xml`文件,该文件描述了项目的依赖关系和其他配置信息。

使用mvn、jar、java、javac命令行启动Spring Boot项目可以在没有构建工具(如Maven或Gradle)的情况下进行项目的编译和启动。但是,使用构建工具可以更方便地管理项目的依赖关系和构建过程。

如果你的Spring Boot项目使用了Gradle作为构建工具,可以使用类似的命令进行编译和启动。只需将`mvn`替换为`gradle`即可。

总结起来,通过mvn、jar、java、javac命令行可以编译和启动Spring Boot项目。按照上述步骤执行命令,确保项目的依赖关系和配置正确,并使用正确的命令行参数启动项目。







## 下载对应依赖 jar

这个错误提示说找不到 `/usr/local/Cellar/maven/3.9.2/libexec/conf/dp-oss-1.0.0.jar` 这个文件,可能是因为您指定的文件路径有误。请检查���下这个文件是否真的存在,或者您是否拼写错误了。

如果确实缺少`dp-oss-1.0.0.jar` 文件,那么您需要从其他地方(如Maven中央仓库)下载并安装该文件。可以按照以下步骤下载并安装`dp-oss-1.0.0.jar` 文件:

1. 打开Maven中央仓库网站: 您可以打开[Maven中央仓库](https://mvnrepository.com/)并在搜索框中输入`dp-oss`。搜索结果中会列出所有与`dp-oss`相关的依赖项。

2. 选择需要下载的依赖项: 从搜索结果中选择需要下载的 `dp-oss`依赖项,并单击依赖项的名称。

3. 下载`dp-oss-1.0.0.jar`: 在依赖项页面上,找到`dp-oss-1.0.0.jar`文件,然后单击链接以下载该文件。

4. 安装`dp-oss-1.0.0.jar`: 在下载`dp-oss-1.0.0.jar`文件后,您可以使用`mvn install:install-file`命令将该文件安装到本地Maven仓库中。示例命令如下:

```sh
mvn install:install-file -DgroupId=com.example -DartifactId=dp-oss -Dversion=1.0.0 -Dfile=/path/to/dp-oss-1.0.0.jar -Dpackaging=jar

其中:

  • -DgroupId-DartifactId 标志指定 group id 和 artifact id。这两个标志会组合形成坐标。
  • -Dversion 标志指定版本号。
  • -Dfile 标志指定要安装的文件路径。
  • -Dpackaging 标志指定文件的类型,这里指定为“jar”。

按照上述步骤下载并安装dp-oss-1.0.0.jar文件,然后重新运行您的Maven构建。这样,maven-install-plugin 插件就能够找到 dp-oss-1.0.0.jar 文件,然后安装到本地Maven仓库中。

maven查看日志 + 删除(指定)依赖

日志

Maven不提供自己的日志查看工具,但您可以使用您喜欢的日志查看工具查看Maven生成的日志。例如,在Linux或MacOS上,您可以使用 lesstail 两个命令来查看Maven的日志:

1
2
3
4
5
# 使用 less 命令查看Maven输出的详细日志
mvn clean install | less

# 使用 tail 命令查看Maven输出的实时日志
mvn clean install | tail -f

在Windows上,您可以使用 more 命令来查看Maven的日志:

1
2
# 使用 more 命令查看Maven输出的详细日志
mvn clean install | more

关于如何删除本地不需要的jar包,您可以手动删除本地Maven仓库中的相关文件。Maven仓库默认存储在 ~/.m2/repository 目录下。您可以浏览到相关的 jar 文件并手动删除它们。

如果您想要从Maven仓库中删除未使用的依赖项,可以使用 versions:purge-local-repository 命令。该命令会检查本地Maven仓库中的所有依赖项,删除未使用的依赖项。该命令可以通过以下方式执行:

1
mvn versions:purge-local-repository

该命令会尝试从本地仓库的 ~/.m2/repository 目录删除本地不需要的依赖项。但是需要注意,如果某些依赖项未正确标记或包含不正确的pom.xml文件,则有可能会删除实际正在使用的依赖项。因此,在执行此操作之前,请仔细检查依赖项的版本,并谨慎删除不需要的依赖项。
avatar
2023/6/2 11:19:43

删除

您可以通过以下命令使用Maven删除指定信息的依赖:

1
mvn dependency:purge-local-repository -Dinclude=com.example:my-library

这会删除本地Maven仓库中与 com.example:my-library 匹配的所有依赖项。您可以使用通配符匹配多个依赖项,例如:

1
mvn dependency:purge-local-repository -Dinclude=com.example:*

这会删除本地Maven仓库中所有以 com.example 开头的依赖项。

您还可以使用 -Dexclude 标志从清单中排除一些依赖项。例如,以下命令会删除 com.example:my-library,但排除版本 1.0.0

1
mvn dependency:purge-local-repository -Dinclude=com.example:my-library -Dexclude=com.example:my-library:1.0.0

请注意,删除本地Maven仓库中的依赖项时,可能会出现其他依赖项依赖于此依赖项的情况,因此请在删除之前仔细分析,并确保不会影响其他依赖项的运行。

maven的 install 安装依赖到本地仓库

备注:需要现在当前目录存在对应的jar包,例如:dp-oss-1.0.0.jar

1
mvn install:install-file  -Dfile=dp-oss-1.0.0.jar  -DgroupId=com.tencent.cloud.datapipeline  -DartifactId=dp-oss  -Dversion=1.0.0  -Dpackaging=jar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
要在maven的本地仓库中安装jar包,您可以使用Maven的`install`命令。`install`命令会将项目构建结果打包安装到maven本地仓库中。

以下是在命令行中使用`install`命令安装jar包到本地仓库的步骤:

1. 打开命令控制台,进入jar包所在的目录。

2. 运行以下命令进行jar包安装:`mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>`,其中:

* `<path-to-file>`:jar包的路径,可以是绝对路径或相对路径。
* `-DgroupId`:jar包的groupId,一般用于定义项目的组织结构。
* `-DartifactId`:jar包的artifactId,一般用于定义项目的模块结构。
* `-Dversion`:jar包的版本号。
* `-Dpackaging`:jar包的类型,一般为jar、war或pom等。

3. 运行命令后,Maven会将jar包安装到本地仓库的`.m2`目录中,此后您就可以在其他项目中引用该jar包。

请注意,为了避免安装失败,您需要确保以下几点:

* `<group-id>`、`<artifact-id>`和`<version>`是唯一的。
* 在本地仓库中已经不存在该jar包。
* `<packaging>`参数一般使用jar,但也取决于您要安装的文件类型。

本地编译项目

安装命令

1
2
mvn -U clean install -DskipTests -Dcheckstyle.skip=true -Drat.skip=true -T 4
(参数解析: -U:强制更新releases、snapshots类型的插件或依赖库。-T:线程数量)

Maven
http://example.com/2023/06/01/工具/maven/
作者
where
发布于
2023年6月1日
许可协议