美文网首页
Maven: 优秀的构建和依赖管理工具

Maven: 优秀的构建和依赖管理工具

作者: 字母数字或汉字 | 来源:发表于2016-10-02 01:47 被阅读328次

    每天我们的编程工作都不只是编写正确的代码,我们很大一部分时间消耗在了进行编译、单元测试、生成文档、打包、部署等等操作上面,这些微不足道的事情,占据了时间,消磨了激情。

    Maven 很好地帮助我们从重复而繁琐的构建过程中解放出来,让这个过程自动化程度极大地提高了,让我们专注于编程与结果。

    安装

    其实安装很简单,但你将遇到的最大难点是:不同平台下如何配置“环境变量”。

    这里附上官方文档:Homepage Download Install

    我在 Windows 下遇到了一个问题,这个问题在 环境变量的引用顺序问题导致无效 这篇文章中得到了解决。

    如果还有问题可以参阅 Maven的安装、配置及使用入门 这里的图文教程。

    POM 文件

    构建系统的配置文件,如同 make 的 Makefile、Ant 的 build.xml,Maven 的配置文件叫 pom.xml。

    Project Object Model,项目对象模型。

    一个简单的例子如下:

    <?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>demo</groupId>
        <artifactId>helloworld</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <properties></properties>
        <dependencies></dependencies>
        <build>
            <plugins></plugins>
        </build>
    
    </project>
    

    groupId 定义了项目属于哪个组,比如 junitorg.springframework
    artifactId 定义了一个项目在组中的唯一 ID,比如 junitspring-core
    version 版本。

    编写代码

    默认 src/main/java 为项目主代码目录。src/main/resources 为项目主资源目录。这些代码将被打包到最终的构件中(如 jar 包)。

    编译

    在终端中执行命令:

    $ mvn clean compile
    

    便会自动运行以下插件和其执行目标:

    • clean:clean
    • resources:resources
    • compiler:compile

    使用最新的 JDK

    在我使用的 Maven 3 中,执行 compiler:compilemaven-compiler-plugin 这个核心编译插件默认使用 JDK 1.5,然而这并不是我们想要的,通过添加以下属性可更新至 JDK 1.8。

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    

    单元测试

    在 Java 世界,JUnit 是单元测试的事实标准,我们需添加 JUnit 依赖。

    <dependency>
        <groupId>junit</groupId>  
        <artifactId>junit</artifactId>  
        <version>4.12</version>  
        <scope>test</scope>  
    </dependency>
    

    默认 src/test/main 为测试代码目录。src/test/resources 为测试资源目录。这些将不会被打包到构件中。

    编写测试用例:

    import org.junit.Assert;
    import org.junit.Test;
    
    public class MyTest {
    
        @Test
        public void test() {
            Assert.assertEquals(2, 1+1);
        }
    }
    

    运行测试用例:

    $ mvn clean test
    

    在 Maven 执行 test 之前,它会先自动执行项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作,具体可参考 Maven 的生命周期。

    打包

    $ mvn clean package
    

    这将生成 target/${artifact}-${version}.jar 包。

    安装

    $ mvn clean install
    

    将构建项目生成的 jar 包安装到 Maven 的本地仓库,供其他项目使用。

    该步骤是可选的,按需使用。

    运行

    你可以通过指定类名运行 main 函数:

    $ java -cp demo.helloworld.Application -jar target/helloworld-1.0-SNAPSHOT.jar
    

    或者在 pom.xml 里写一条配置:

    <properties>
        <start-class>demo.helloworld.Application</start-class>
    </properties>
    

    现在 jar 包的 META-INF/MANIFEST.MF 里就有了主类信息:

    Main-Class: demo.helloworld.Application
    

    可以直接运行:

    $ java -jar target/helloworld-1.0-SNAPSHOT.jar
    

    IntelliJ IDEA

    以 IDEA 为 IDE 使用 Maven 可以获得非常愉快的体验。

    IDEA 自带了 Maven 3,但如果本地安装了更高版本的 Maven,可以在 IDEA 的“设置”中选择它,最好加至“默认设置”里,避免每次都重复劳动。

    编写完 pom.xml 后,在 IDEA 的 Project 里右键点击它,选 Maven -> Reimport 自动加载依赖,更新配置。

    TODO

    • archetype
    • plugin
    • POM: module & parent

    相关文章

      网友评论

          本文标题:Maven: 优秀的构建和依赖管理工具

          本文链接:https://www.haomeiwen.com/subject/yxcdyttx.html