Maven Project

Java项目

一个Java项目的构建,首先需要确定要引入哪些依赖,每个依赖可能还会有自己的依赖,所以需要对依赖进行管理。其次,需要确定项目的目录结构。接着,需要配置环境,例如JDK的版本,编译打包的流程等。

这些工作非常复杂琐碎,所以需要一个标准化的Java项目管理和构建工具。Maven就是这样的一个工具,它提供了一套标准化的项目结构,提供了一套标准化的构建流程,提供了一套依赖管理机制。

Maven项目结构

一个使用Maven管理的普通的Java项目,它的目录结构默认如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
  my-app/
  ├── pom.xml
  ├── src/
     ├── main/
        ├── java/
           └── com/
               └── mycompany/
                   └── MyApp.java
        └── resources/
            └── application.properties
     └── test/
         ├── java/
            └── com/
                └── mycompany/
                    └── MyAppTest.java
         └── resources/
             └── test.properties
  └── target/
  • 目录src/main/java包含了项目的源代码,目录src/test/java包含了测试代码。
  • pom.xml(POM: project object model)是项目配置的核心。

POM

pom.xml文件大致结构如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<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) -->
       ... lots of helpful plugins
    </pluginManagement>
  </build>
</project>
  • groupId类似于Java的包名,通常是公司或组织名称。
  • artifactId类似于Java的类名,通常是项目名称。
  • nameurl代表了项目的名称和项目网站的url。
  • properties用于定义全局变量,在POM中任何位置都可以访问。
  • dependencies用于声明项目所需的依赖。依赖的依赖关系和依赖之间的依赖关系会由Maven解决。
  • build用于声明项目的目录结构,管理插件等。

更多Maven相关内容

Apache Maven Getting Started Guide

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy