跳到主要内容

Maven基本使用

现在网上挺难找到老版本的maven了,版本下载地址:

总地址(这里可以找到所有版本):https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/

3.8.7:https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip

3.6.3: https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip

Maven仓库:https://mvnrepository.com/

配置,在setting中修改,添加阿里云镜像:

        <mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public </url>
</mirror>

Maven构建

编译:mvn compile

清理:mvn clean

测试:mvn test

打包:mvn package

安装到本地仓库:mvn install

可以自己配置一个maven指令,这个可以方便调试,快捷的可以使用IDEA自带的指令

image-20240118194736528

插件:

添加tomcat7 插件,右键可以直接运行

image-20240118195110323

依赖管理

依赖传递

如果模块test1 使用到了test2,那么test1可以使用test2中的所有依赖,

同一个配置中,后面的配置前面的

不想让别人知道自己模块用的什么,加optional true 不让别人看到:

        <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<optional>true</optional>
</dependency>

排除依赖 exclusions:

        <dependency>
<groupId>com.cxk</groupId>
<artifactId>test3</artifactId>
<version>0.1</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>

依赖范围

image-20240118202630047

image-20240118203038990

maven高级

分模块开发与设计

原始模块如下:

image-20240118204629433

将模块拆为pojo ,dao,service ,controller

dao模块依赖pojo,如果直接编译dao模块,会报错找不到

  • pojo模块坐标:

        <groupId>com.itheima</groupId>
    <artifactId>ssm_pojo</artifactId>
    <version>1.0-SNAPSHOT</version>
  • dao模块导入:

            <!--导入资源文件pojo-->
    <dependency>
    <groupId>com.itheima</groupId>
    <artifactId>ssm_pojo</artifactId>
    <version>1.0-SNAPSHOT</version>
    </dependency>
  • service导入:

            <!--导入资源文件dao-->
    <dependency>
    <groupId>com.itheima</groupId>
    <artifactId>ssm_dao</artifactId>
    <version>1.0-SNAPSHOT</version>
    </dependency>
  • controller导入:

        <dependency>
    <groupId>com.itheima</groupId>
    <artifactId>ssm_service</artifactId>
    <version>1.0-SNAPSHOT</version>
    </dependency>

每次使用其他模块,都需要安装其他模块

聚合

为了解决上面的问题,需要安装其他模块,引入聚合:

image-20240118211857372

用一个模块来聚合其他所有模块:

image-20240118212437786

packaging 需要设置为pom

此时构建不需要再去分别安装每个模块

部分构建

比如我现在有一个父工程parent

    <modules>
<module>../casll-api</module>
<module>../casll-baas</module>
<module>../casll-node-generator</module>
<module>../casll-gateway</module>
<module>../casll-common</module>
<module>../casll-dapp-docshare</module>
<module>../casll-auth</module>
</modules>

我只想构建gateway服务,而不要其他bass之类的,但是gateway又依赖于api,common,也就是要构建gateway的时候,先构建api,和common

mvn clean install -pl ../casll-gateway -am

我的目录结构如下:

├── casll-api
│   ├── pom.xml
├── casll-auth
│   ├── pom.xml
├── casll-baas
│   ├── pom.xml
├── casll-common
│   └── pom.xml
├── casll-dapp-docshare
│   ├── pom.xml
├── casll-gateway
│   ├── pom.xml
├── casll-node-generator
│   ├── pom.xml
├── casll-parent
│   └── pom.xml

-pl(或 --projects):指定一个或多个模块,使用逗号分隔。你可以使用模块的 artifactId、相对路径或绝对路径。

-am(或 --also-make):指示 Maven 在构建指定模块之前,先构建它们所依赖的模块(即构建依赖关系树)。