maven基本知识了解

 

也要配置环境变量,maven_home

本地仓库,本地的包

中央仓库,一般要配置私服,使用阿里云即可

id,艺术品id,骨架id; 骨架决定了maven项目的结构;  pom.xml是核心配置文件

 

mvn命令

mvn,要在项目根目录下执行,也就是pom文件下:

compile是编译,

clean清除编译结果,

package是打包(jar或war在核心配置文件pom文件里面指明),打的是src目录,src就是源码,与src平级的跟打包全无关系,是项目目录下的其他文件

install发布到本地仓库,【Install的时候会run,安装操作,Install的时候,会先运行,包括测试类,运行报错就install失败,报错包括扫描的bean无法注入等问题,打包操作,Package也是

deploy是发布到私服仓库(需要在pom文件配置私服地址以及账户密码)

Update是下载包,从本地仓库,本地仓库地址在settings文件,本地仓库没有的包会从中央仓库去下载,可以配阿里云镜像仓库

 

Target目录

是运行时会临时生成的tomcat环境目录,在eclipse里看是空的,在工作空间看是有class文件夹的,就是java运行的字节码文件了,因为eclipse是自动javac编译的, 所以会有字节码文件;

当进行install、package操作,target里面会生成jar/war包,整体上就是是编译打包的class文件(install在eclpse显示,package只在工作空间目录显示);

打包好的jar或者war就是字节码文件,可以直接运行的,包含的内容有java文件编译后的字节码文件和配置文件,还有导入的依赖库的第三方jar包(坐标,scope,约定过什么级别,是否参与打包)

Web工程war包,部署在tomcat服务器,启动服务器就能访问了;(项目被启动了,其实启的是tomcat服务器,项目部署在服务器里面)

Jar包,普通jar,启动了就跑完了,main方法直接执行,而如果是内置了tomcat的jar(springboot工程)启动了可以直接访问

此外注意,jar包自身是要被启动的,所以一定要有入口,main方法或者servlet;

 

Eclispe安装Maven插件问题

配置自己下载的maven,settings要改,两个都改

创建maven项目时,骨架的选择,jar或war,普通jar项目和web项目,如果是web项目,由于有了web.xml,需要导入相关servlet/jsp/等依赖

不使用骨架创建项目,结构很完整,如果是web项目,就补充相关文件。

由于maven内置了tomcat插件(可以改端口改项目名),所以maven创建的web项目,可以直接运行,不需要发布到tomcat中去;【运行命令,tomcat:run】

但这只是可以直接在IDE上运行,如果是部署出去,war包,服务器安装tomcat;  springboot项目内置了tomcat的包,所以可以直接-jar部署

<build>

<finalName>mavenDemo2</finalName>

<plugins>

<!-- tomcat6插件 -->

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>tomcat-maven-plugin</artifactId>

<version>1.1</version>

<!-- 更改tomcat端口号为8088 -->

<configuration>

<port>8088</port>

<path>/</path>

</configuration>

</plugin>

</plugins>

 

</build>

 

本地仓库和私服仓库,可以通过maven仓库视图来查看,索引,可以在插入依赖时快速查询到本地仓库所能提供的依赖

依赖的传递问题,当默认策略不管用,如果需要指定,可以排除不要的依赖,直接引入需要的依赖

可以<properties>来统一管理版本,以便于版本升级

编译插件,可以指定jdk版本,pom.xml中配置maven编译插件:

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.1</version>

<configuration>

<source>1.7</source>

<target>1.7</target>

</configuration>

</plugin>

</plugins>

</build>

 

 

父工程

一般只用来管理依赖的版本,maven子工程引入这个父工程即可,父工程只管理版本号,子工程该引入的依赖还是得引入。当然父工程如果直接引了依赖包,子工程可以直接继承,不用再引,不建议这样干因为子工程不便于查看。

编译插件也可以直接被继承

 

<packaging>如果不配类型,默认是jar类型。父工程必须是pom类型。

 

版本管理

<dependencyManagement></dependencyManagement>

父工程对依赖版本进行管理的声明,表示不是引包,而是声明在进行版本管理,子工程可以直接引用被管理的依赖,不需要写版本号了。

pom.xml文件中,jar的版本判断的两种途径

1:如果dependencies里的dependency自己没有声明version元素,那么maven就

会倒dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version

2:如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。

 

 

聚合工程

注意目录名(聚合工程的model标签使用的是model的目录名);

项目名,和maven的name这三者的区别;

聚合工程没有任何内容,只是为了管理和构建maven项目的时候方便;每个model还是单独的服务,有自己的pom,可单独打包。

一般聚合工程也是父工程。

 

springboot的maven打包插件

<!--打包构建配置-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

 

如果没有maven打包插件,不会把相关依赖打进去,也就是没有lib目录。 这种情况对于没有main方法的common包或者SDK而言,不需要运行的jar包,只是供依赖。

如果使用maven打包插件,要求程序是可执行的,即有main方法,否则会报错;

 

打包打war类型的,因为肯定有入口,main或者servlet,可以打到lib;

 

 

 ——————

 

 

关于打包的范围

 

引入一个坐标,scope标签表示有效的范围,以及还要注意,是否会参与打包

 

Compiletestruntimemysq,只在项目真正运行时需要,作为驱动去加载数据源】、provided【例如servlettomcat有,所以】

 

安装到本地语句示例

 

mvn install:install-file  -DgroupId=com.oracle –DartifactId=ojdbc8 –Dversion=12.2.0.1.0 –Dpackaging=jar –Dfile=ojdbc8.jar

 

posted @ 2021-03-13 11:31  加瓦加瓦  阅读(158)  评论(0)    收藏  举报