zoukankan      html  css  js  c++  java
  • java学习之maven

     maven是项目构建工具,能把项目抽象成POM(Project Object Model)

    Maven使用POM对项目进行构建、打包、文档化等操作

    解决了项目需要类库的依赖管理,简化了项目开发环境搭建的过程

    maven实现了:

      是构建项目变得容易;

      统一了构建项目的方式,通过pom.xml描述项目;

      提出了一套开发项目的最佳实践,源代码在src/main/java中,配置文件在src/main/resources中,测试代码在src/test/java中;

      包含不同环境项目构建方式;

      解决了类库依赖的问题,自动下载依赖包,协助管理jar包之间的冲突

    1.maven的核心是pom.xml,用XML方式描述了项目模型

    <?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>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
        <name>demo</name>
        <description>Demo project for Spring Boot</description>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.0.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    groupId项目所属的组
    artifactId 项目唯一标识
    version项目的版本号
    packaging项目的类型,常用的有jar和war
    modelVersion maven的版本
    dependencies依赖
    build插件

    2.下载

    https://maven.apache.org/

    3.安装

    直接解压,如E:abysoftwarejavaapache-maven-3.5.3

    设置环境变量

    MAVEN_HOME = E:abysoftwarejavaapache-maven-3.5.3
    path = %MAVEN_HOME%in;

    安装Maven是否安装成功

    mvn -version

    4.设置maven

    中心仓库位于国外,下载速度会很慢

    安装目录下,conf/settings.xml

    添加仓库镜像

    <mirror>
          <id>alimaven</id>
          <mirrorOf>central</mirrorOf>
          <name>aliyun maven</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>

    5.常用的命令

    新建一个maven目录

    (1)进入此目录,创建一个maven工程

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

    成功创建项目工程my-app

    目录结构

    maven项目采用“约定优于配置”的原则

      src/main/java约定用于存放源代码

      src/main/test用于存放单元测试代码

      src/target用于存放编译、打包后的输出文件

    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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.mycompant.app</groupId>
      <artifactId>my-app</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>my-app</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>

     (2)编译maven工程

    mvn  compile

    会自动在target目录中生成class文件

    打包编译时后台一直输出警告信息

    在pom.xml增加

     <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>

    (3)删除target目录

    mvn  clean

    (4)测试

    mvn clean test

    /src/test/java/com/mycompant/app/AppTest.java里的junit的测试用例,把testApp()方法中的assertTrue( true );改成assertTrue( false );

    mvn clean test

     

    (5)运行

    A.不需要传递参数的

    mvn exec:java -Dexec.mainClass="com.mycompant.app.App"

    B.需要传递参数的

    mvn exec:java -Dexec.mainClass="com.mycompant.app.App" -Dexec.args="arg0 arg1 arg2" 

    C.修改pom.xml

     在</project>前增加下面代码

    <build>
          <finalName>${project.artifactId}</finalName>
          <plugins>
              <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                         <execution>
                             <goals>
                                 <goal>exec</goal>
                             </goals>
                         </execution>
                </executions>
                <configuration>
                         <executable>java</executable>          
                         <arguments>                       
                             <argument>-classpath</argument>
                             <classpath>
                             </classpath>
                             <argument>com.mycompant.app.App</argument>
                         </arguments>
                </configuration>
              </plugin>
          </plugins>
      </build>

    直接

    mvn exec:exec

    (6)打包

    mvn  package

    在target目录生成jar或war

    直接到target目录下去执行java -jar my-app.jar命令运行jar包时出现了“my-app.jar没有主清单属性”的错误提示

    加上入口类的配置,在pom.xml中的</plugins>前加入如下代码

        <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.mycompant.app.App</mainClass>
                                </transformer>
                            </transformers>
                    </configuration>
                  </execution>
                </executions>
           </plugin>

    说明:

      配置完成后,执行mvn package即可打包

      在target目录下会生成两个jar包,注意不是my-app.jar文件,而是另外一个

      (my-app.jar 是因为<build>中包含 <finalName>${project.artifactId}</finalName>,否则名为original-xxx.jar)

      生成的jar文件包含了所有依赖,所以可以直接运行

    重新打包

    mvn clean package

    重新进入target

    此时会有两个jar文件

    java -jar my-app-1.0-SNAPSHOT.jar

    如果项目中用到了Spring Framework,将依赖打到一个jar包中,运行时会出现读取XML schema文件出错。原因是Spring Framework的多个jar包中包含相同的文件spring.handlers和spring.schemas,如果生成一个jar包会互相覆盖。为了避免互相影响,可以使用AppendingTransformer来对文件内容追加合并:

    完整的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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.mycompant.app</groupId>
      <artifactId>my-app</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>my-app</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>
      <build>
          <finalName>${project.artifactId}</finalName>
          <plugins>
              <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                         <execution>
                             <goals>
                                 <goal>exec</goal>
                             </goals>
                         </execution>
                </executions>
                <configuration>
                         <executable>java</executable>          
                         <arguments>                       
                             <argument>-classpath</argument>
                             <classpath>
                             </classpath>
                             <argument>com.mycompant.app.App</argument>
                         </arguments>
                </configuration>
              </plugin>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.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.mycompant.app.App</mainClass>
                                </transformer>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.handlers</resource>
                                </transformer>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.schemas</resource>
                                </transformer>
                            </transformers>
                    </configuration>
                  </execution>
                </executions>
              </plugin>
          </plugins>
      </build>
    </project>

    直接到target运行

    java -jar my-app.jar

    输出Hello World!

    6.使用IDE设置Maven

    Eclipse  windows--》preference

    add,Installation home 输入maven的安装目录

    添加后勾选使用新的maven

    创建web的maven项目 File -> New -> Maven Project -> Next

    Group id和Artifact id

    finish

    说明:

      项目可能会出现 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 的错误

      点击项目右键>>Build Path>>Configure Build Path>>Libraries>>Add Library>>Server Runtime>>配置好的tomcat服务>>finish>>apply and Close

    tomcat server start

    浏览器中 http://localhost:8080/my-app/

    输出

    Hello World!

  • 相关阅读:
    开通了
    A computer hardware platform abstraction
    脑机接口入门概览
    JDK自带VM分析工具jps,jstat,jmap,jconsole
    泛型里的super和extend
    动态规划
    用二分法查找的套路(一)
    A computer hardware platform abstraction
    CentOS7安装JDK1.8
    CentOS7如何修改hostname
  • 原文地址:https://www.cnblogs.com/baby123/p/8567070.html
Copyright © 2011-2022 走看看