跳转至

Maven 入门


2017-03-27 by dongnan

安装 maven

Linux 安装 maven 非常简单,请参考这里

mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_101, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.101-3.b13.el6_8.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-514.2.2.el7.x86_64", arch: "amd64", family: "unix"

使用 maven

创建一个项目

第一次执行这个命令可能需要一些时间。这是因为 Maven 会自动下载依赖包(jar插件和其他文件)到你的 maven 本地仓库。

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

[INFO] Scanning for projects...
#...省略
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0/maven-archetype-quickstart-1.0.jar (5 KB at 6.1 KB/sec)
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /
[INFO] Parameter: package, Value: com.mycompany.app
[INFO] Parameter: groupId, Value: com.mycompany.app
[INFO] Parameter: artifactId, Value: my-app
[INFO] Parameter: packageName, Value: com.mycompany.app
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /my-app
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:55 min
[INFO] Finished at: 2017-03-14T13:09:22+08:00
[INFO] Final Memory: 14M/99M
[INFO] ------------------------------------------------------------------------

我的 maven 本地仓库路径

file ~/.m2/
/root/.m2/: directory

项目的目录结构

tree my-app/
my-app/
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── mycompany
    │               └── app
    │                   └── App.java
    └── test
        └── java
            └── com
                └── mycompany
                    └── app
                        └── AppTest.java

11 directories, 3 files

其中,src/main/java目录包含项目源代码,src/test/java目录包含检查源代码,pom.xml是项目的项目对象模型,或POM

POM文件

Maven里,pom.xml文件是项目配置的核心。它是一个独立的配置文件,包含了你想要的方式下建立项目所必须的主要信息。

cat my-app/pom.xml

    <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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>my-app</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>

构建项目

cd my-app && mvn package

#...省略
[INFO] Building jar: /my-app/target/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:55 min
[INFO] Finished at: 2017-03-14T13:44:50+08:00
[INFO] Final Memory: 16M/146M
[INFO] ------------------------------------------------------------------------

打包完成后在项目目录会创建一个子目录 target

ls target/
classes  maven-archiver  maven-status  my-app-1.0-SNAPSHOT.jar surefire-reports  test-classes

可以使用命令测试编译好的 JAR

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

Maven阶段

尽管几乎没有一个全面的清单,这些都是执行最常用的默认生命周期阶段。

  • validate:验证项目是正确的,所有必要的信息。
  • compile:编译项目的源代码。
  • test:使用合适的单元测试框架测试编译的源代码。 这些测试应该不需要代码被打包或部署。
  • package:把编译后的代码,并在其分发格式打包,例如一个JAR包。
  • integration-test:如果需要,处理和部署包到集成测试可以运行的环境。
  • verify:运行任何检查,以验证包是有效的,同时符合质量标准。
  • install:包安装到本地仓库中,用作本地其他项目的依赖。
  • deploy:在集成或发布环境中进行,复制最终的包到远程仓库与其他开发者和项目共享。
  • clean:清理之前建立构建的工件。
  • site:生成此项目的站点文档。

内容来自:

参考

欢迎关注微信公众号: 运维录

Back to top