Maven如何构建项目

Maven是一个项目管理的综合工具。使用 Maven 给我们带来的最直接的好处,就是统一管理了jar 包及jar包之间依赖维护,为我们省去了到各个网站去下载所需的jar包。本篇文章主要讲讲如何用Maven去构建项目。

一、命令行构建maven项目

  1. 打开命令控制台,输入命令mvn archetype:generate
  2. 选择需要创建的模板,默认7(普通java项目),10(javaweb项目)


  3. 输入groupId,artifactId,version三要素及package


  4. 回车确认后,创建完毕
    当然也可以一次性命令创建项目
  • 创建java项目
mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} 
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  • 创建简单web项目
mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} 
-DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

二、Eclipse上构建maven项目

一般较新版本的Eclipse都会带有Maven插件,如何没有可点击Help -> Eclipse Marketplace,搜索maven关键字,安装如下插件


  1. Maven环境配置:点击Window -> Preferences->Maven


  2. New 菜单 Other.. -> Maven -> Maven Project
  3. 选择Create a simple project及Use default Workspace location


  4. 添加项目信息,Finish完成。


三、IDEA上构建maven项目

与在eclipse上类似,首先配置好本地的Maven,我这边直接放图了。




四、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/xsd/maven-4.0.0.xsd">
 
    <!-- 模型版本。maven2.0必须是这样写,现在是maven2唯一支持的版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 公司或者组织的唯一标志 -->
    <groupId>com.test</groupId>
    <!-- 项目的唯一ID,一个groupId下面可能多个项目-->
    <artifactId>testProject</artifactId>
    <!-- 项目的版本号 -->
    <version>1.0.0-SNAPSHOT</version>
    <!-- 打包类型,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar -->
    <packaging>jar</packaging>
       <!--项目一些信息,如项目名,描述,项目地址-->
        <name>testProject</name>
    <description>一个测试项目</description>
        <url>http://www.test.com/ </url>
    <!--父pom配置,子pom可继承父pom的groupId,version -->
     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
                <!--设空值将始终从仓库中获取;
                    查找顺序:relativePath元素中的地址–本地仓库–远程仓库
                  -->
        <relativePath />
    </parent>
  <!--父pom中,包含的子模块配置-->
  <modules><module>子模块</module></modules>
<!--项目开发者列表 -->  
 <developers>
    <!--项目开发者的信息,列举了主要一些标签 -->
    <developer>
        <!--项目开发者名称-->
        <name> xxxxxx</name>
        <!--项目开发者email -->
        <email> xxxxxx@163.com</email>
        <!--项目开发者URL -->
        <url ></url>
        <!--项目开发者所属机构 -->
        <organization> </organization>
    </developer>
 </developers>
<!--列出项目协议-->
<licenses>
    <license>
        <!--license名称 -->
        <name>MIT</name>
        <!--官方的license正文页面的URL -->
        <url></url>
        <!--关于license的补充信息 -->
        <comments> </comments>
    </license>
</licenses>
        <!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 -->
    <properties>
        <file.encoding>UTF-8</file.encoding>
        <java.version>1.8</java.version>
        <commons.io.version>2.5</commons.io.version>
    </properties>
     <!--dependencyManagement
          父pom可以用来统一管理子模块的依赖jar包;
          子pom可以用来引入父pom
      -->
    <dependencyManagement>
          <dependencies>
            ........
            <!--子pom通过非继承的方式来引入pom,可以多个;而parent的方式只能一个-->
            <dependency>  
              <groupId>com.test</groupId>  
              <artifactid>project_parent1</artifactId>  
              <version>1.0.0</version>  
              <type>pom</type>  
              <scope>import</scope>  
            </dependency> 
          </dependencies>
    </dependencyManagement>
        
    <!-- 定义项目的jar依赖关系 -->
    <dependencies>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version></version>
                        <!--范围选择,默认compile:编译,运行,测试 有效
                              provided:编译,测试 有效,不含在打包中
                              test:测试 有效
                              runtime:运行,测试 有效
                              system:仓库之外的类库;编译,测试 有效
                          -->
            <scope>compile</scope>
                        <systemPath>配合 scope=system时使用</systemPath>
            <!-- 设置依赖是否可选,默认为false,  
                          如果为true时,其它项目依赖该项目时,需要 quartz时,需写明    
                         dependency依赖-->
            <optional>false</optional>
 
            <!-- 排除依赖关系。禁止c3p0导入-->
            <exclusions>
                <exclusion>
                    <groupId>com.mchange</groupId>
                    <artifactId>c3p0</artifactId>
                </exclusion>
            </exclusions>
 
        </dependency>
    </dependencies>
       <!--构建配置-->
        <build>
    <!-- 产生的构件的文件名,默认值是${project.artifactId}-${project.version}。 -->
         <finalName>${project.artifactId}</finalName>
    <!-- 构建产生的所有文件存放的目录,默认为${basedir}/target,即项目根目录下的target -->
        <directory>${basedir}/target</directory>
        <!--插件列表-->
            <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                                <version>..</version>
                                <executions>
                                    <!--插件与maven生命周期阶段绑定配置-->
                                    <execution>
                                      <id>att-sources</id>
                                      <!--阶段名,如:compile,package等-->
                                      <phase>package</phase>
                                      <!--插件需要执行的目标-->
                                      <goals>
                                          <goal></goal>
                                      </goals>
                                  </execution>
                                </executions>
                                <!--插件参数配置-->
                                 <configuration>
                                 </configuration>
                                <!--项目引入插件所需要的额外依赖 -->
                    <dependencies>
                    <dependency>...</dependency>
                    </dependencies>
            </plugin>
       </plugins>
        </build>
        <!--远程库配置,可能需要引入一些特殊jar-->
    <repositories>
        <repository>
            <id>public</id>
            <name>aliyun nexus</name>
                        <!--远程库地址-->
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                        <!--开启发布版本的下载-->
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
    <!-- 插件远程库 -->
    <pluginRepositories>
        <pluginRepository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <!--开启发布版本的下载-->
                        <releases>
                <enabled>true</enabled>
            </releases>
                        <!--关闭快照的下载-->
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>

依赖范围

scope 编译 测试 运行
compile Y Y Y
test Y
provided Y Y
runtime Y Y
system Y Y

依赖传递性
比如有a,b,c三个jar包或项目,a依赖b,b依赖c,而c对于a来说是传递性依赖。传递依赖受依赖范围限制。下表中第一列代表a对b的依赖,第一行代表b对c的依赖。则a对于c的依赖范围如下表所示,为空则不依赖。

compile test provided runtime
compile compile runtime
test test test
provided provided provided provided
runtime runtime runtime

五、Maven打包命令

主要有三个打包命令mvn package、mvn install、mvn deploy。当然一般打包之前都会先清理一下。

  • mvn clean package:完成了清理、项目编译、单元测试、打包功能。
  • mvn clean install:完成了清理、项目编译、单元测试、打包及布署到本地maven仓库功能。
  • mvn clean deploy:完成了清理、项目编译、单元测试、打包及布署到本地maven仓库和远程仓库功能。

参考资料
pom.xml配置文件详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容