• Maven 入门


    一、Maven是什么

    1. 优秀的构建工具

    我们能快速的从源码库构件出最终产品,只需一写配置,能让Maven帮你清理、编译、测试、打包、部署,然后得到最终产品。

    2. 不重复发明轮子

    Maven已经有庞大的插件,全世界通用,自己不用谢代码

    3. 项目管理工具

    项目开发过程中需要调用多种jar包,不同的项目可能用相同的jar包,为统一管理项目jar包,实现多个项目中共享JARs。

    二、Maven下载和环境变量配置

    1. 官网下载

    [apache-maven-3.5.2-bin.zip]
    (http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.zip)

    2. 解压到指定目录

    指定目录:C:AppDateapache-maven-3.5.2

    3. 配置本机环境变量

    环境变量路径:
    新建M2_HOME,值:C:AppDateapache-maven-3.5.2
    在Path中添加 C:AppDateapache-maven-3.5.2in

    2. 解压到指定目录

    指定目录:C:AppDateapache-maven-3.5.2

    3. 配置本机环境变量

    环境变量路径:
    新建M2_HOME,值:C:AppDateapache-maven-3.5.2
    在Path中添加 C:AppDateapache-maven-3.5.2in

    4. CMD验证

    打开cmd命令窗口
    命令:mvn -v

    安装Maven前要配置Java环境

    C:Windowssystem32>mvn -v
    Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)
    Maven home: C:AppDateapache-maven-3.5.2in..
    Java version: 1.8.0_151, vendor: Oracle Corporation
    Java home: C:Program FilesJavajdk1.8.0_151jre
    Default locale: zh_CN, platform encoding: GBK
    OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
    

    三、Maven使用入门

    (一)、Maven约定目录结构及内容

    • **约定优与配置 **

    Maven约定的Java项目结构,以hello-word为例:
    CMD 命令:tree /f

    E:Class16_MavenDemohello-word> tree /f
    │  pom.xml
    │
    └─src
        ├─main
        │  └─java
        │          HelloWord.java
        │
        └─test
            └─java
                    HelloWordTest.java
    

    1.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">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.xusan</groupId>
      <artifactId>hello-word</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
      <name>hello-word</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.7</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>
    
    
    

    2.主代码

    package com.xusan.helloword;
    
    public class HelloWord {
    	public String sayHello() {
    		return "Hello Maven";
    	}
    	public static void main(String[] args) {
    		System.out.println(new HelloWord().sayHello());
    	}
    }
    
    

    3.测试代码

    package com.xusan.helloword;
    import static org.junit.Assert.assertEquals;
    import org.junit.Test;
    
    public class HelloWordTest {
    	@Test
    	public void testSayHello() {
    		HelloWord helloword = new HelloWord();
    		String result = helloword.sayHello();
    		assertEquals("Hello Maven",result);
    	}
    }
    
    

    (二) Maven常用指令

    1. mvn -v 或者 mvn -version:验证环境变量
    2. mvn help:system :打印所有系统属性和环境变量
    3. mvn compile:编译主源码,但不编译test目录,产生target 文件
    4. mvn test:运行单元测试
    5. mvn test-compile:编译测试代码,生成targer在test-classes下
    6. mvn clean: 删除target 文件夹
    7. mvn package :打包
    8. mvn install:安装
    1、测试mvn compile
    E:Class16_MavenDemohello-word> mvn compile
    [INFO] Scanning for projects...
    
    [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello-word ---
    [INFO] Changes detected - recompiling the module!
    [INFO] Compiling 1 source file to E:Class16_MavenDemohello-word	argetclasses
    [INFO] -----------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    
    2、测试mvn compile
     E:Class16_MavenDemohello-word> mvn test-compile
    [INFO] Scanning for projects...
    (省略...)
    [INFO] Changes detected - recompiling the module!
    [INFO] Compiling 1 source file to E:Class16_MavenDemohello-word	arget	est-classes
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    
    
    3、查看最新目录target
      E:Class16_MavenDemohello-word> tree /f
    E:.
    │  pom.xml
    │
    ├─src
    │  ├─main
    │  │  └─java
    │  │          HelloWord.java
    │  │
    │  └─test
    │      └─java
    │              HelloWordTest.java
    │
    └─target
        ├─classes
        │  └─com
        │      └─xusan
        │          └─helloword
        │                  HelloWord.class
        │
        ├─maven-status
        │  └─maven-compiler-plugin
        │      ├─compile
        │      │  └─default-compile
        │      │          createdFiles.lst
        │      │          inputFiles.lst
        │      │
        │      └─testCompile
        │          └─default-testCompile
        │                  createdFiles.lst
        │                  inputFiles.lst
        │
        └─test-classes
            └─com
                └─xusan
                    └─helloword
                            HelloWordTest.class
    
    4、打包和运行
    E:Class16_MavenDemohello-word> mvn clean package
    [INFO] Scanning for projects...
    
    (省略...)
    [INFO] Building jar: E:Class16_MavenDemohello-word	argethello-word-1.0-SNAPSHOT.jar
    [INFO] 
    [INFO] BUILD SUCCESS
    
    

    target下产生一个jar:targethello-word-1.0-SNAPSHOT.jar

    5、安装到本地仓库
    E:Class16_MavenDemohello-word> mvn install
    [INFO] Scanning for projects...
    ---省略...---
    Results :
    Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
    [INFO] Building jar: E:Class16_MavenDemohello-word	argethello-word-1.0-SNAPSHOT.jar
    [INFO] Installing E:Class16_MavenDemohello-word	argethello-word-1.0-SNAPSHOT.jar to C:AppDatemaven
    epositorycomxusanhello-word1.0-SNAPSHOThello-word-1.0-SNAPSHOT.jar
    ---我的本地仓库是:C:AppDatemaven
    epository,后面会讲修改本地仓库---
    [INFO] Installing E:Class16_MavenDemohello-wordpom.xml to C:AppDatemaven
    epositorycomxusanhello-word1.0-SNAPSHOThello-word-1.0-SNAPSHOT.pom
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    
    6、执行jar

    命令:java -jar

    E:Class16_MavenDemohello-word> cd .	arget
    PS E:Class16_MavenDemohello-word	arget> java -jar .hello-word-1.0-SNAPSHOT.jar
    .hello-word-1.0-SNAPSHOT.jar中没有主清单属性
    
    • 原因
      HelloWord类有main方法,默认打包成jar无法直接运行,带有main方法类信息无法添加到manifest中运行(打开jar文件中的META-INF/MANIFEST.MF文件,无法看到Main-Class一行)
    • 解决办法
      Maven插件————”Apache Maven Shade Plugin“中的“ManifestResourceTransformer”可以解决问题, 参考——四、POM插件配置
    7、mvn install
    E:Class16_MavenDemohello-word> mvn install
    E:Class16_MavenDemohello-word> cd .	arget
    E:Class16_MavenDemohello-word	arget> java -jar .hello-word-1.0-SNAPSHOT.jar
    Hello Maven
    

    输出Hello Maven 代表成功编译。

    (三)Archetype生成项目骨架

    1. mvn archetype:generate

    2000多个骨架供选择,直接回车,默认

    2043: remote -> us.fatehi:schemacrawler-archetype-plugin-dbconnector (-)
    2044: remote -> us.fatehi:schemacrawler-archetype-plugin-lint (-)
    2045: remote -> xyz.luan.generator:xyz-generator (-)
    Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1108:
    Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
    1: 1.0-alpha-1
    2: 1.0-alpha-2
    3: 1.0-alpha-3
    4: 1.0-alpha-4
    5: 1.0
    6: 1.1
    Choose a number: 6: archetype:generatearchetype:generate
    
    Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
    1: 1.0-alpha-1
    2: 1.0-alpha-2
    3: 1.0-alpha-3
    4: 1.0-alpha-4
    5: 1.0
    6: 1.1
    Choose a number: 6:
    Define value for property 'groupId': com.xusan
    Define value for property 'artifactId': helloword
    [INFO] Using property: version = 1.0-SNAPSHOT
    Define value for property 'package' com.xusan: : com.xusan
    Confirm properties configuration:
    groupId: com.xusan
    artifactId: helloword
    version: 1.0-SNAPSHOT
    package: com.xusan
    [INFO] ----------------------------------------------------------------------------
    [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
    [INFO] ----------------------------------------------------------------------------
    [INFO] Parameter: basedir, Value: E:Class16_MavenDemoArchetype
    [INFO] Parameter: package, Value: com.xusan
    [INFO] Parameter: groupId, Value: com.xusan
    [INFO] Parameter: artifactId, Value: helloword
    [INFO] Parameter: packageName, Value: com.xusan
    [INFO] Parameter: version, Value: 1.0-SNAPSHOT
    [INFO] project created from Old (1.x) Archetype in dir: E:Class16_MavenDemoArchetypehelloword
    
    

    生成一个新的helloword骨架

    E:Class16_MavenDemoArchetype> tree /f
    E:.
    └─helloword
        │  pom.xml
        │
        └─src
            ├─main
            │  └─java
            │      └─com
            │          └─xusan
            │                  App.java
            │
            └─test
                └─java
                    └─com
                        └─xusan
                                AppTest.java
    
    1.生成的main/./App
    package com.xusan;
    
    /**
     * Hello world!
     *
     */
    public class App 
    {
        public static void main( String[] args )
        {
            System.out.println( "Hello World!" );
        }
    }
    
    
    2.生成的test/./AAppTest
    package com.xusan;
    
    import junit.framework.Test;
    import junit.framework.TestCase;
    import junit.framework.TestSuite;
    
    /**
     * Unit test for simple App.
     */
    public class AppTest 
        extends TestCase
    {
        /**
         * Create the test case
         *
         * @param testName name of the test case
         */
        public AppTest( String testName )
        {
            super( testName );
        }
    
        /**
         * @return the suite of tests being tested
         */
        public static Test suite()
        {
            return new TestSuite( AppTest.class );
        }
    
        /**
         * Rigourous Test :-)
         */
        public void testApp()
        {
            assertTrue( true );
        }
    }
    
    
    3.生成的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">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.xusan</groupId>
      <artifactId>helloword</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>helloword</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>
    
    

    2.直接编辑命令包含3要素

    命令:mvn archetype:generate "-DgroupId=com.xusan.maven01" "-DartifactId=demo-maven01" "-Dversion=1.0-SNAPSHOT" "-Dpackage=com.xusan.maven01"

    四、Maven项目核心POM .xml

    pom定义了项目的基本信息,描述了项目的构建、依赖

    1、Maven项目的基本坐标:

    <!-- 项目包名: 公司地址名称反写+项目名称-->
      <groupId>com.xusan</groupId>
    <!--项目模块名称:一般为 项目名-模块名 -->
      <artifactId>hello-word</artifactId>
    <!-- 指定当前pom 的版本-->
      <version>1.0-SNAPSHOT</version>
    

    2.POM插件配置

    (1).查看官方配置文档

    官网ManifestResourceTransformer配置

    (2).配置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">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.xusan</groupId>
      <artifactId>hello-word</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
      <name>hello-word</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.7</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
      
      <build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-shade-plugin</artifactId>
    				<version>3.1.0</version>
    				<executions>
    					<execution>
    						<goals>
    							<goal>shade</goal>
    						</goals>
    						<configuration>
    							<transformers>
    								<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    								<manifestEntries>
    								<Main-Class>com.xusan.helloword.HelloWord</Main-Class>										
    								</manifestEntries>
    								</transformer>
    							</transformers>
    						</configuration>
    					</execution>
    				</executions>
    			</plugin>
    		</plugins>
    	</build>	
      
    </project>
    
    
    

    只要修改包名即可

    <manifestEntries>
    	<!--改成包名-->
    	<Main-Class>com.xusan.helloword.HelloWord</Main-Class>
    </manifestEntries>
    
  • 相关阅读:
    使用docker 创建SSL 证书
    定时任务知识清单列表
    Spring Tool Suite介绍
    常用的正则表达式
    MD5加密--项目案例
    MD5加密简单使用
    啥是MD5?
    SpringBoot整合Redis
    StringRedisTemplate操作redis数据
    013-- mysql常用的查询优化方法
  • 原文地址:https://www.cnblogs.com/xuwei1/p/8283584.html
Copyright © 2020-2023  润新知