Maven笔记 #01# 入门

一、Maven是干什么的?

我相信只要你写过足够多的代码,就...
肯定有思考过写一个脚本方便把项目自动打包成war并部署到服务器;
肯定有思考过对于一个web项目用什么样的文件结构才比较合适,怎么样才算得上是best practice;
也许还想过弄个中心仓库免去每次都要自己网上手动找包的麻烦 ...
 - - - - - - - - - - - - -
Maven正是一个做这些事情的工具。如果你真的尝试做过上面的事情,就很容易理解Maven了。
那么自己弄和用Maven有什么区别呢?借用《Maven编程实战》里的一个的比喻,建立高度自定义的构建系统(自己写脚本)就像买组装PC,虽然其乐无穷,但是耗时费力,结果也不一定很好,并且实际项目中也不可能给你这么多时间。使用Maven就像购买品牌PC,省时省力,而且直接就是best practice,还能得到Maven社区的大量支持 ...

二、用Maven的好处

个人觉得用Maven最大的好处在于:统一了各种规范(流程和项目结构)+依赖管理。

补充一些理由:

  1. 让你在IDEA和Eclipse等各种集成环境中切换毫无压力
  2. 方便大家合作写代码,节约了学习成本,因为各种东西都已经约定、统一好了
  3. 并且这些约定还是best practice,不仅成熟、稳定,还好用!
  4. 资料多、支持多,随便去GitHub上看Java项目,Maven结构的尤其多
  5. 节省时间。腾出自己网上到处下jar包的时间,做更有价值的事情
  6. 自动化打包部署,有效减少鼠标键盘的磨损度、缓解脱发等不良症状。。。
  7. 手动省略号。。。。

总之。Maven绝对是个懒人必备的工具。不过,在刚开始,你不得不花一点时间来适应、学习它(很快就会变成习惯!)。只需少许的时间就能掌握这样一件神器,显然非常划算。

三、Maven与命令行

跟着官方教程操作一遍差不多就好了。。稍微记录一下↓

▲运行mvn package后得到jar包的实际结构(注意resource的位置):

▲哪里找包:https://mvnrepository.com/

▲生成简单java项目原型:

mvn -B archetype:generate 
  -DarchetypeGroupId=org.apache.maven.archetypes 
  -DgroupId=com.mycompany.app 
  -DartifactId=my-app

▲生成简单java web项目原型:

mvn archetype:generate 
    -DarchetypeGroupId=org.apache.maven.archetypes 
    -DarchetypeArtifactId=maven-archetype-webapp 
    -DgroupId=com.mycompany.app 
    -DartifactId=my-webapp

▲跳过测试:

mvn clean install -DskipTests

▲只跑特定的测试mvn test -Dtest=[ClassName]#[MethodName],例:

$ mvn test -Dtest=ProfileDAOTest#saveProfile 

▲pom.xml参考(其实是方便自己copy...)

<?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>org.sample.webapp</groupId>
    <artifactId>web-test-01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- -source 1.5 中不支持 try-with-resources-->
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>2.7.8</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>
pom.xml

四、Maven与IntelliJ IDEA

本来想写点什么,发现官网都准备好了。。feature-rich integration for Maven以及https://www.jetbrains.com/help/idea/maven-support.html

不过我觉得还是应该以命令行为主,集成环境里的操作作为辅助,这样,IDEA就成了一个高级代码编辑器,之后换其它开发环境也很容易适应。

▲以图表方式查看项目依赖关系:

▲Maven怎么和web开发结合可以参考这个:https://www.imooc.com/learn/587

原文地址:https://www.cnblogs.com/xkxf/p/9939424.html