【Maven】5分钟快速上手

安装

前提:已安装好java并将JAVA_HOME添加到环境变量中

首先下载Maven,选择二进制的zip包 apache-maven-3.8.1-bin.zip

解压后,将bin目录添加到环境变量PATH中

添加好之后,进入shell,输入 mvn -v 查看

创建一个工程

工程需要放在某个地方,所以先创建一个目录,这里我的目录是:D:\Project\study\maven,然后在这个目录执行下面命令

小技巧:在地址栏输入cmd然后回车,可以在当前目录打开shell,像下面这样

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

执行完之后,就会在当前目录中创建一个my-app的文件夹,文件夹的结构如下:

my-app
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java

这份生成的目录结构,就是maven定义的标准工程结构,详细参考 https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

POM文件

项目对象模型POM(Project Object Model)是Maven的核心配置,POM是一个单独的配置文件,记录了构建项目的大部分信息。POM文件内容比较多,但是这里先不用理解,只需要使用即可。自动生成的POM文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>my-app</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

上述操作做了什么

我们安装了Maven,执行了Maven的目标原型:generate,然后向目标传递了各种参数。前面的原型就是提供该功能的插件,这个功能生成了一个基于maven-archetype-quickstart原型的项目。

这里有些概念还不知道,先别急,先知道有这些东西就行。

构建项目

mvn package

在项目目录,也就是D:\Project\study\maven\my-app打开shell,然后执行上述命令,会出下如下的结果:

[INFO] Building jar: D:\Project\study\maven\my-app\target\my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  55.299 s
[INFO] Finished at: 2021-07-21T03:18:30+08:00
[INFO] ------------------------------------------------------------------------

如果是首次执行命令,就需要先下载一些东西,如果出现如下报错,说明无法连接Maven的中央仓库

[ERROR] Plugin org.apache.maven.plugins:maven-resources-plugin:3.0.2 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:3.0.2: Could not transfer artifact org.apache.maven.plugins:maven-resources-plugin:pom:3.0.2 from/to central (https://repo.maven.apache.org/maven2): transfer failed for https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/3.0.2/maven-resources-plugin-3.0.2.pom: Connection reset -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException

这时候可以使用国内的镜像,方法为:在D:\Develop\maven\apache-maven-3.8.1\conf\settings.xml文件中的mirrors节点,添加下面的内容,保存后重新执行mvn package

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

和第一个命令archetype:generate不同,package是一个阶段,而不是目标。阶段是项目构建时,生命周期中的一个步骤,生命周期由多个有序的的阶段组成。当执行一个阶段时,Maven会从第一个阶段开始执行,直到执行完指定的阶段为止。当我们执行compile时,实际执行了:

  1. validate
  2. generate-sources
  3. process-sources
  4. generate-resources
  5. process-resources
  6. compile

然后我们运行一下刚刚打的包:

java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App

它会打印一行字:

Hello World!

Java9或更高版本

如果使用的Java是9或更高版本的,为了防止maven-compiler-plugin插件不兼容,插件版本必须使用3.6.0以上,并且maven.compiler.release参数的值,下面是一个设置好的例子:

    <properties>
        <maven.compiler.release>11</maven.compiler.release>
    </properties>
 
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

运行Maven工具

Maven阶段

下面这些时执行时最常用的默认生命周期阶段:

  • validate: 验证项目的信息,确保信息是正确可用的
  • compile: 编译项目源代码
  • test: 使用合适的框架对源码进行测试。这些测试不需要对代码进行打包和部署
  • package: 将编译后的代码打包成可分发的形式,比如JAR
  • integration-test: 处理包并在必要的时候将包部署到可以运行集成测试的环境中
  • verify: 运行一些检查以验证包的有效性和满足质量标准
  • install: 将包安装到本地存储库中,以便在本地其他项目中作为依赖使用
  • deploy: 在集成或发布环境中,将最终包复制到远程存储库,以便于其他开发人员和项目共享

除了上面默认的生命周期以外,还有两个需要注意:

  • clean: 清除先前构建创建的内容
  • site: 生成项目的网页文档

由一件有趣的事情需要注意,阶段和目标可以按顺序执行。

mvn clean dependency:copy-dependencies package

该命令将清理项目、复制依赖项并打包项目(当然,执行打包之前的所有阶段)

生成网页

mvn site

这个阶段根据项目的pom信息生成一个网页,生成目录为项目下的target/site。这个网页会展示项目的依赖和插件等信息。

# Maven 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×