前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

Maven

作者头像
matt
发布2022-10-25 15:56:49
7550
发布2022-10-25 15:56:49
举报
文章被收录于专栏:CSDN迁移

一、基本概念

  1. 作用 依赖管理 一键构建(自身集成tomcat插件)
  2. 结构(约定优于配置) 项目目录:/ 用于maven的配置文件:pom.xml 源代码目录:/src 工程源代码目录:/src/main 核心代码:/src/main/java 配置文件:/src/main/resources 测试代码:/src/test/java 测试配置文件:/src/test/resources 页面资源:/src/main/webapp 输出目录:/target 编译之后的class文件:/target/classes
  3. 仓库 依据:maven工程,jar包坐标 本地仓库(local)、远程仓库(b2b,私服,局域网)、中央仓库(central,英特网)

二、常用命令

  1. mvn clean 删除编译的项目
  2. mvn compile 编译项目,放置在target目录下(有classes)
  3. mvn test 编译项目,包含test
  4. mvn package 执行test命令,并根据packageing配置打出相应的格式。
  5. mvn install 执行package命令,并把项目包放进本地仓库中。
  6. mvn deploy

三、生命周期

默认生命周期:编译(compile)、测试(test)、打包(package)、安装(install)、发布(deploy) 清理生命周期:清除编译信息(clean) 站点生命周期:

四、概念模型

  1. 项目对象模型(POM) 项目自身信息、运行时所依赖的jar包信息、运行环境信息(jdk、tomcatt)
  2. 依赖管理模型(依赖管理) jar包坐标:公司组织名称(groupId)、项目名(artifactId)、版本号(version,开发中的项目可以加上“SNAPSHOT”标记,LATEST指某个构建的最新发布,RELEASE指最后一个发布版)

packing:项目的类型,默认为jar,描述了项目打包后的输出。 classifier:不常用,分类器,生成两个单独的构件。

  1. 生命周期(一键构建) 每一个构建项目的命令都对应了maven底层的一个插件。

五、常见问题

1. 未联网时可以从本地已下载仓库中找资源:

VM Option:-DarchetypeCatalog=internal

2. Jar包冲突

代码语言:javascript
复制
常见报错:
Caused by:java.lang.NoSuchMethodError
Caused by: java.lang.ClassNotFoundException

Maven默认处理策略:最短路径优先,相同则最先声明优先。 方法一: Maven Helper插件中的Dependency Analyzer可以分析冲突的jar包,找到标红jar包execute即可。mvn dependency:tree命令。 方法二:

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.3.1</version>
    <exclusions>
        <exclusion>
            <groupId>jline</groupId>
            <artifactId>jline</artifactId>
        </exclusion>
    </exclusions>
</dependency>

方法三: 版本锁定原则,一般用在继承项目的父项目中,统一定义jar包版本。

方法四: 某些场景可以使用scope来避免。

代码语言:javascript
复制
<!-->provied仅在编译时使用<-->
<scope>***</scope>

1.compile
默认,参与整个默认生命周期。
2.test
进参与测试代码编译,如junit。
3.runtime
无需参与项目的编译,不过后期的测试和运行周期需要其参与,类似compile除去编译阶段。
4.provided
不好含打包环境,类似compile除去打包阶段。一般其他地方会提供,只是避免编译时jar包错误。
5.system
类似provided,依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用。

3. 修改运行环境

代码语言:javascript
复制
<build>
	<plugins>
		<plugin>
			<gorupId>org.apache.tomcat.maven</gorupId>
			<artifactId>tomcat7-maven-plugin</artifactId>
			<version>2.2</version>
			<configuration>
				<port>8888</port>
			</configuration>
		</plugin>
		<plugin>
			<gorupId>org.apache.maven.maven</gorupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>2.2</version>
			<configuration>
				<!-->jdk版本<-->
				<target>1.8</target>
				<!-->classes文件版本<-->
				<source>1.8</source>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>
	</plugins>
</build>

4. sql使用

数据驱动、链接数据库的地址、数据库用户名称、数据库密码

5. 配置文件修改

代码语言:javascript
复制
<localRepository>/Path/to/local/repo</localRepository>

<mirror>
   <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

<mirror>
    <id>ibiblio</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
    <id>jboss-public-repository-group</id>
    <mirrorOf>central</mirrorOf>
    <name>JBoss Public Repository Group</name>
    <url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>

<mirror>
    <id>central</id>
    <name>Maven Repository Switchboard</name>
    <url>http://repo1.maven.org/maven2/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
<mirror>
    <id>repo2</id>
    <mirrorOf>central</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://repo2.maven.org/maven2/</url>
</mirror>

六、参数介绍

1. 多项目管理

maven要求同一个工程的所有子项目都放置到同一个目录下,每一个字目录代表一个项目。 所有的子项目pom.xml都会继承父项目pom的内容,取值为子项目pom内容优先。

代码语言:javascript
复制
<!-- 父项目 -->
<modules>
	<module>module1</module>
	<module>module2</module>
</modules>

<!-- 子项目 -->
<parent>
	<groupId>com.ustc.cn</groupId>
	<artifactId>module_parent</artifactId>
	<version>1.0</version>
</parent>

除了继承,maven还支持引用方式。

代码语言:javascript
复制
<project>
	<description>...</description>
	...
	<dependencies>
		...
		<dependency>
			<groupId>com.ustc.cn</groupId>
			<artifactId>module3</artifactId>
			<version>1.0</version>
		</dependency>
	</dependencies>
</project>
  1. 参数 (1)groupId:必须。 (2)artifactId:必须。

(3)version 可以使用区间表达式来表示。 例如:(2.0,)表示>2.0,[2.0,3.0)表示2.0<=version<3.0;多个条件之间用逗号分隔[1,3),[5,7]。

(4)scope:作用域限制。 (5)type:一般在pom引用依赖时出现,其他时候不用。

(6)optional 是否可选依赖。maven认为程序对外部的依赖会随着所处的阶段和应用场景而变化,所以maven中的依赖关系有作用域scope的限制。scope又如下取值: 1)compile:编译范围 默认的范围,在所有的classpath中可用,同时它们也会被打包。 2)provided:已提供范围 只有在当JDK或一个容器已提供该依赖之后才使用,在编译classpath可用。 3)runtime:运行时范围 只有在运行和测试系统的时候需要,在编译的时候不需要。如:在编译时不需要JDBC API JAR,,而只有在运行时才需要JDBC驱动实现。 4)test:测试范围 在一般的编译和运行时都不需要,只有在测试编译和测试运行阶段时可用。 5)system:系统范围 和provided类似,但是必须显示的提供一个对本地系统中JAR文件的路径。即必须同时提供一个systemPath元素。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、基本概念
  • 二、常用命令
  • 三、生命周期
  • 四、概念模型
  • 五、常见问题
    • 1. 未联网时可以从本地已下载仓库中找资源:
      • 2. Jar包冲突
        • 3. 修改运行环境
          • 4. sql使用
            • 5. 配置文件修改
            • 六、参数介绍
              • 1. 多项目管理
              相关产品与服务
              项目管理
              CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档