一、maven入门

作者: 小炼君 | 来源:发表于2017-07-21 00:46 被阅读160次

    maven的世界里,一切都从pom文件开始......

    TIM图片20170723214603.gif

    下面是一个入门级helloworld项目的 pom配置文件:

    <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.zheng.mvnstudy</groupId>
      <artifactId>hello-world</artifactId>
      <version>1.0-SNAPSHOT</version>
      <name> Maven Hello World Project </name>
    </project>
    

    pom文件中的groupIdartifactIdversion三个元素定义了项目的基本坐标,在maven中,任何jar,pom,war都是以这些基本坐标元素来区分的。

    无规矩不成方圆,在pom文件中定义的元素都有各自的规范。

    groupId定义了项目所属组,通常与公司或组织有关,格式形如公司或组织网址反序.项目名(假设域名为www.zheng.com建立的一个myapp项目,最后命名为com.zheng.myapp)

    artifactId项目模块名,在所属组中唯一,用于区分不同的模块,比如上面的hello-world,格式形如项目名-模块名

    version定义了当前项目的版本,在maven中定义了几个版本符号SNAPSHOT(开发版),alpha,(内部测试版),beta(外部测试),release(发布版),根据项目不同情况填写不同的版本标识

    name为当前项目模块声明了一个友好的名称,虽然不是必须的,但是建议为每一个项目模块都定义一个友好的名称,方便信息交流

    maven与java代码之间是相互解耦互相不影响的

    maven项目结构

    project-name
        src
            main
                java
                resources
            test
                java
                resources
    

    其中src/main/里面的代码被称之为主代码,在打包时会打包到最终的构建中,src/test下面的代码为测试代码,打包时将被忽略

    代码包名定义规范
    groupId/artifactId相吻合,项目中java类包都应该基于项目的groupIdartifactId,比如上面的hello-world模块主代码包为:src/main/java/com/zheng/mvnstudy/helloworld

    maven的功能非常强大,它还可以配置各种插件以满足项目需要,下面的插件将项目编译环境设置成了jdk1.8

    <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
      </build>
    

    maven开始构建项目时,它会自动完成对项目主资源处理、主代码编译、测试资源处理、测试代码编译等工作

    maven生成可运行的jar

    java编译环境可以直接对包含main方法的类打包成jar包并运行,在maven中也可以做到这一点,但要实现这个功能,需要借助额外的插件maven-shade-plugin

    提示:maven常规打包生成的jar包是无法直接运行的,因为带有main方法的类信息不会直接添加到MANIFEST文件中(打开jar文件中的META-INF/MANIFEST.MF将无法看到Main-Class一项参数)

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <mainClass>com.zheng.helloworld.HelloWorld</mainClass>
                        </transformer>
                    </transformers>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    使用archetype生成项目骨架

    maven3提供了一个archetype工具用于帮助用户自动生成maven项目结构,通过CMD进入到项目目录中直接运行mvn archetype:generate
    下面是运行命令之后的结果
    Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 984: 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: 5: Define value for property 'groupId': : com.zheng.helloworld Define value for property 'artifactId': : hello-world-archetype Define value for property 'version': 1.0-SNAPSHOT: : Define value for property 'package': com.zheng.helloworld: : Confirm properties configuration: groupId: com.zheng.helloworld artifactId: hello-world-archetype version: 1.0-SNAPSHOT package: com.zheng.helloworld Y: : Y [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: basedir, Value: D:\workspace\maven-study [INFO] Parameter: package, Value: com.zheng.helloworld [INFO] Parameter: groupId, Value: com.zheng.helloworld [INFO] Parameter: artifactId, Value: hello-world-archetype [INFO] Parameter: packageName, Value: com.zheng.helloworld [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: D:\workspace\maven-study\hello-world-archetype [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 03:10 min [INFO] Finished at: 2017-06-17T23:07:00+08:00 [INFO] Final Memory: 15M/178M [INFO] ------------------------------------------------------------------------
    最后会在项目目录下生成项目的基本结构

    TIM截图20170721003653.png

    以上是我学习《maven实战》一书前三章所做的笔记要点,写在简书上主要是方便自己查阅,当然如果我的笔记能帮到大家那我也是非常开心的

    相关文章

      网友评论

        本文标题:一、maven入门

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