• Maven入门


      上一篇中已经安装好了Maven,这一篇以经典的Hello World为例讲述Maven基本操作流程。

      Maven主要完成自动化构建过程,其核心就在于配置文件pom.xml。POM(Project Object Model)定义了项目的基本信息,描述了项目如何构建,项目依赖等。

    一,项目目录结构及代码

      先上一张目录结构图,在helloworld项目文件夹下执行tree命令:

    .
    ├── pom.xml
    └── src
        ├── main
        │   └── java
        │       └── com
        │           └── yxl
        │               └── helloworld
        │                   └── HelloWorld.java
        └── test
            └── java
                └── com
                    └── yxl
                        └── helloworld
                            └── HelloWorldTest.java
    11 directories, 3 files

    现在解释目录各文件夹的意义,约定俗成的,pom.xml是核心配置文件,后面细说。src/main/java/是放置源代码的目录,maven会自动搜寻该目录进行编译等操作。com.yxl.helloworld是包名,所以后面有三层目录com/yxl/helloworld/。src/test/java/是放置测试代码的目录。HelloWorld.java是主代码,如下所示:

      1 package com.yxl.helloworld;
      2 
      3 public class HelloWorld
      4 {
      5     public String sayHello()
      6     {
      7         return "Hello World";
      8     }
      9     public static void main(String[] args)
     10     {
     11         System.out.println(new HelloWorld().sayHello());
     12     }
     13 }

    代码只有一个方法sayHello,该类带有一个main方法,使得编译后的结果可以直接运行。

    测试代码为HelloWorldTest.java,如下所示:

      1 package com.yxl.helloworld;
      2 
      3 import static org.junit.Assert.assertEquals;
      4 import org.junit.Test;
      5 
      6 public class HelloWorldTest
      7 {
      8     @Test
      9     public void testSayHello()
     10     {
     11         HelloWorld helloWorld = new HelloWorld();
     12         String result = helloWorld.sayHello();
     13         assertEquals("Hello World", result);
     14     }
     15 }

    二,pom.xml配置文件介绍

    先上代码,pom.xml:

     1 <?xml version = "1.0" encoding = "UTF-8"?>
      2 <project xmlns="http://maven.apache.org/POM/4.0.0" 
      3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      4     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      5   <modelVersion>4.0.0</modelVersion>
      6 
      7   <groupId>com.yxl.helloworld</groupId>
      8   <artifactId>helloworld</artifactId>
      9   <version>1.0-SNAPSHOT</version>
     10   <packaging>jar</packaging>
     11 
     12   <name>helloworld</name>
     13   <url>http://maven.apache.org</url>
     14 
     15   <properties>
     16     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     17   </properties>
     18 
     19   <dependencies>
     20     <dependency>
     21       <groupId>junit</groupId>
     22       <artifactId>junit</artifactId>
     23       <version>4.7</version>
     24       <scope>test</scope>
     25     </dependency>
     26   </dependencies>
     27 
     28 <build>
     29     <plugins>
     30       <plugin>
     31         <groupId>org.apache.maven.plugins</groupId>
     32         <artifactId>maven-shade-plugin</artifactId>
     33         <version>2.3</version>
     34         <executions>
     35           <execution>
     36             <phase>package</phase>
     37             <goals>
     38               <goal>shade</goal>
     39             </goals>
     40             <configuration>
     41               <transformers>
     42                 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
     43                   <manifestEntries>
     44                     <Main-Class>com.yxl.helloworld.HelloWorld</Main-Class>
     45                     <Build-Number>123</Build-Number>
     46                   </manifestEntries>
     47                 </transformer>
     48               </transformers>
     49             </configuration>
     50           </execution>
     51         </executions>
     52       </plugin>
     53     </plugins>
     54   </build>
     55 
     56 </project>

    第一行是XML头部,指定了XML的版本和编码方式。

    2-4行声明了一些POM相关的命名空间及xsd元素,不是必须的,但能够让第三方工具(如IDE中的XML编辑器)帮助我们快速编辑POM。

    modervison指定了当前POM模型的版本,对于Maven2及Maven3来说,它只能是4.0.0。

    7-9行是pom.xml中最重要的内容,它定义了项目的坐标,在Maven的世界中,所有的jar,pom和war都基于这些坐标进行区分。groupId定义了项目属于哪个组,通常和所在的公司关联,假如公司是yxl,开发了一个myapp的项目,那么groupId一般定义为com.yxl.myapp。artifactId定义了当前项目在组中唯一的ID,version定义了项目的版本,第一版一般定义为1.0-SNAPSHOT,后面升级的可以陆续命名为1.1,2.0等。

    19-26行定义了使用JUnit的依赖,其中,groupId是junit,artifactId是junit,版本是4.7,其他版本也可以,这三个元素构成了JUnit的坐标,Maven会自动下载junit-4.7.jar包。其中还有一个值为test的scope元素,它表示依赖范围,test表示该依赖只在测试环境中有效。

    28-54行为了让生成的jar包可执行,执行mvn clean package生成的JAR包默认是不可执行的,因为带有main方法的信息不会被添加到manifest中。使用java -jar运行该包时,报错如下:

      no main manifest attribute, in original-helloworld-1.0-SNAPSHOT.jar

    为了生成可执行的JAR包,需要借助maven-shade-plugin插件,生成可执行JAR包只是该插件的功能之一,其他功能见官网,配置示例网址为:

    http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html

    关键的一行在于mainClass,它重新设定了程序运行的入口地址,其内容就是我们编写的类名称。在运行mvn clean package生成可执行JAR包,当使用java -jar命令再次执行该包时,正常输出结果。

    三,Maven基本命令

    1,编译主代码

    mvn clean compile

     2,进行代码测试

    mvn clean test

    3,打包

    mvn clean package

     

    4,运行,生成的可执行jar包位于新生成的targe目录下,其中还包含了很多其他文件内容,这里略过。

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

     

    5,安装,即将生成的jar包安装到本地仓库,供其他项目使用

    mvn clean install

    6,使用原型,如果每次构建Maven项目都需要调用mkdir一个个生成指定目录未免繁琐,我们使用原型快速构建目录结构,需要做的只是按照提示使用默认值或者指定值,像groupId,artifactId等肯定是自己指定的,而version等就可以使用默认值即可。

    mvn archetype:generate

    OK,大功告成咯,看来整个HelloWorld也不容易啊。

  • 相关阅读:
    dell服务器 bios界面
    windows server 常用功能(一)
    Windows server 2016 / Windows 10关于域管理员帐号权限不足的问题
    (转)Java并发编程:并发容器之CopyOnWriteArrayList
    (转)ThreadLocal
    (转)java volatile关键字
    (转)java fail-fast机制
    (转)java并发对象锁、类锁、私有锁
    (转)java synchronised关键字
    javascript array
  • 原文地址:https://www.cnblogs.com/yxl10/p/4143884.html
Copyright © 2020-2023  润新知