工欲善其事必先利其器--maven

简介: maven 工具

工欲善其事必先利其器--maven

1. maven下载及教程

maven 官网地址 https://maven.apache.org/index.html#

mavne 3.6.3 下载地址 https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/

maven 菜鸟教程 https://www.runoob.com/maven/maven-tutorial.html

maven repository 仓库地址:https://mvnrepository.com/

阿里maven仓库:https://maven.aliyun.com/mvn/view

其他教程自行搜索
配置mvn环境变量,配置完环境变量即可在终端,如idea Terminal 中运行mvn命令。注意idea Terminal 中的命令是环境变量中的maven路径,区别于idea Setting中的maven路径。通常会将两个设置为同一个路径,注意修改idea setting中的manven配置。

2. idea maven 配置

idea-maven.jpg

菜单 file > New Projects Settings > Preferences for New Projects  可以配置新项目的默认配置。

file-setting.jpg

maven默认读取配置文件路径 ~/.m2/settings.xml。
通常会修改长仓库的地址。打开注释代码,自行修改路径。

<localRepository>/path/to/local/repo</localRepository>

配置阿里云仓库, 官网:https://maven.aliyun.com/mvn/guide

所有仓库*

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

central仓库

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

3. maven 私服配置

开发中公司通常会搭建私服,私服配置 添加服务账号 server其中id为服务器名称,需与miros或repository中id一致。
id 是要认证的服务器名称,可以配置多个。它是用来标记服务器的,要唯一。

username 和 password 是用户名和密码。

<servers>
    <server>
      <id>serverName</id>
      <username>userName</username>
      <password>pwd</password>
    </server>
  </servers>

添加miros或者repositoriry

<mirror>
    <id>serverName</id>
    <mirrorOf>*</mirrorOf>
    <name>serverName</name>
    <url>http://localhost:8080/repository/internal</url>
</mirror>
<repositories>
    <repository>
      <id>serverName</id>
      <name>serverName</name>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <!-- 仓库地址 -->
      <url>http://localhost:8080/repository/internal</url>
    </repository>
</repositories>

idea项目中pom中配置使用的仓库

<distributionManagement>
    <repository>
    <id>serverName</id>
    <url>http://localhost:8080/repository/internal</url>
    </repository>
</distributionManagement>

4. profile 环境

<profiles>
  <profile>
    <id>dev</id>
    <repository>
    <!-- ... -->
    </repository>
  </profile>
</profiles>

settting.xml中默认开启的profile

<activeProfiles>
    <activeProfile>czb</activeProfile> 
  </activeProfiles>

通过命令指定profile

mvn clean package -Pdev

当配置了profileidea中显示如下。可以配置多个,不同的项目可进行切换,一般一个公司一个maven私服。

5. spring cloud 开发常用的依赖

pom依赖 version 通常会写到properties中,
注意 <type>pom</type> <scope>import</scope>

<!-- springboot依赖     -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>2.2.5.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>
<!-- springCloud依赖     -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-dependencies</artifactId>
  <version>Hoxton.SR3</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>
<!-- alibaba依赖     -->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  <version>2.2.0.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

spring-cloud-dependencies的版本选择,在mvn仓库中搜索并查看某一版本在Managed Dependencies 列表Version显示的基本就是spring-boot的最低版本。

例如 查看Hoxton.SR3 的spring-boot版本信息

查看spring-cloud-starter的版本信息

可以看到 Hoxton.SR3 的spring-boot最低版本为2.2.5.RELEASE 最高版本为2.4.5

spring-cloud-alibaba-dependencies的依赖 在阿里mavne仓库中搜索 地址:https://maven.aliyun.com/mvn/search,

6. 常用的Maven插件

maven-compiler-plugin编译插件 可以不用添加,配置properties属性即可

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <java.version>1.8</java.version>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

直接指定编译插件

<!--编译版本管理-->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.5.1</version>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
    <encoding>UTF-8</encoding>
  </configuration>
</plugin>

spring-boot-maven-plugin 注意 repackage:创建一个自动可执行的jar或war文件。

不指定repackage打的jar包会出现找不到main方法的问题。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${spring-boot-dependencies.version}</version>
    <configuration>
        <!-- 没有该配置,devtools 不生效 -->
        <fork>true</fork>
    </configuration>
    <executions>
        <execution>
            <goals>
                <!-- 重新打包 -->
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<!-- 跳过单元测试 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>
<!-- docker -->
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>${docker-maven-plugin.version}</version>
    <configuration>
        <imageName>${project.artifactId}:${project.version}</imageName>
        <dockerDirectory>${project.basedir}</dockerDirectory>
        <skipDockerBuild>true</skipDockerBuild>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

源码打包插件,可将源码打包一并发布到maven仓库,其他使用者可以下载源码。

<!--源码发布插件-->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-source-plugin</artifactId>
  <version>3.2.1</version>
  <executions>
    <execution>
      <goals>
        <goal>jar</goal>
      </goals>
      <id>attach-sources</id>
    </execution>
  </executions>
</plugin>

打包效果:

7. idea中pom依赖关系查看

可查看依赖结构树,有冲突的会标红,可以通过排除jar包方式解决冲突,或者在properties统一指定冲突jar包的版本。

8. maven 重用目录结构

1)多module的常用目录结构,以坚果为例,每个module是一个独立的项目,项目内按包做功能划分。

2)分布式常用目录结构,以常见的商城为例,商品模块

  • api ---- 移动端的接口
  • page ---- 后台管理页面 (web层)
  • sdk ---- 微服务的对外调用接口
  • biz ---- 业务层 (server层)

结构无定论,适应项目就好。

相关文章
|
7月前
|
存储 Java Apache
|
2月前
|
Java 程序员 测试技术
项目构建工具
项目构建工具
74 1
|
7月前
|
存储 Java 应用服务中间件
|
7月前
|
Java Maven 索引
|
存储 Java 测试技术
新手Maven入门(二)
Maven 构建的生命周期是一个明确定义的用于构建和分发构件的过程。有 3 个内置的构建生命周期:clean、default 和 site。
92 0
|
7月前
|
Java 关系型数据库 MySQL
Maven教学--上
Maven教学--上
121 5
|
Java Maven
Maven插件开发简明教程(1)
Maven插件开发简明教程(1)
71 0
Maven插件开发简明教程(1)
|
Java Maven
【小白设计工程】配置Maven
【小白设计工程】配置Maven
76 0
|
存储 XML Java
新手Maven入门(一)
Maven 是一种用来管理 Java 项目的工具,但不是那种用来管理资源规划和调度的工具。它处理的是管理一个具体的项目所涉及的各种任务,如编译、测试、打包、文档以及分发。
98 0
|
Java 程序员 Maven
【JavaWeb】带你走进Maven
如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。
77 0