关于maven

Posted 天马行空郭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于maven相关的知识,希望对你有一定的参考价值。

 新建maven项目:

maven 坐标:
Group Id:项目的名称,项目名称以域名的倒序,比如:cn.itcast.mavendemo
Artifact Id:模块名称(子项目名称)
Version:模块的版本,snapshot(快照版,没有正式发行)、release(正式发行版本)

packaging的方式(打包方式): 
jar:普通的java工程,运行在控制台上的(默认); 
war:web工程; 
pom:聚合工程 
maven 的生命周期:
点击项目右键 -> Run As -> Maven..... 注意:
2 Maven build     (无三点) :显示历史记录
3 Maven build...  (有三点) : 在Goals那里输入命令


compile 命令:重新编译Java文件,于是target文件夹下面就重新过一份.class文件了(编译源代码)(控制台后面有会说的,生成class文件)
clean:与compile刚刚相反,清掉target下面的.class文件,以及也会把jar包或者war包清掉
package:  打成一个jar或者war包(当然,如果没有.class文件,会自动编译,也就是执行complile)(可以看到target目录下有jar包或者war包或者什么包生成)
install:把生成的jarwar包放在maven项目的坐标目录(那个什么什么目录  groudid  artifacateid)下面(控制台后面有会说的,生成jarwar包文件)

 通过在maven上面配置Tomcat,用命令(tomcat7:run)来启动 :

<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.xiaofeng.www</groupId>
  <artifactId>mavenWeb</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>    <!-- maven的编译插件 -->
          <configuration>  
              <source>1.7</source>  <!-- 指定jdk版本 -->
              <target>1.7</target>  
          </configuration> 
          </plugin>
          <plugin>
              <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>   <!-- 在Maven上面配置tomcat,不用再部署 -->
              <version>2.2</version>
              <configuration>
                  <port>8080</port>   <!-- 路径: -http://localhost:8080/mavenWeb/ -->
                  <path>/mavenWeb</path>
              </configuration>
          </plugin>
      </plugins>
  </build>
  
  <dependencies>
    <!-- servlet一定要配置,scope标签一定要 -->
      <dependency>
           <groupId>javax.servlet</groupId> 
           <artifactId>servlet-api</artifactId>
           <version>2.5</version>  
           <scope>provided</scope>         
       </dependency>
  </dependencies>
  
</project>

 聚合与继承:

先建父类,记得是建一个maven project,

再建子类:

可以留意到目录结构:

这就是聚合:把AB两个子项目聚合在一起

这就是继承:AB两个项目都可以用parent的jar包了

 注意:聚合以及继承常常一起用,但是并没有完全等同。比如:A工程也可以不继承parent的jar包,但是也可以聚合在parent下面

 依赖范围和依赖传递:

1、compile 编译、测试、运行,A在编译时依赖B,并且在测试和运行时也依赖。
    strus-core、spring-beans
    打到war包或jar包。
2、provided 编译、和测试有效,A在编译和测试时需要B。
    比如:servlet-api就是编译和测试有用,在运行时不用(tomcat容器已提供)。
    不会打到war。
3、runtime:测试、运行有效。
    比如:jdbc驱动包 ,在开发代码中针对java的jdbc接口开发,编译不用。
    在运行和测试时需要通过jdbc驱动包(mysql驱动)连接数据库,需要的!!
    会打到war。
4、test:只是测试有效,只在单元测试类中用。
    比如:junit
    不会打到war。

 设置依赖范围:(如果是compile就不需要设置了,因为compilescope的默认值。重新执行打包为war , 会发现servlet-api.jar已经不存在。

<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
      <scope>runtime</scope>
 </dependency>
<dependency>
        <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
 </dependency>

什么是依赖传递,大概知道这个概念就可以了,下面这个图我也看不懂

标签:

properties:统一管理版本号

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <erui.version>1.2.0-SNAPSHOT</erui.version>
    <mysql.version>5.1.34</mysql.version>
</properties>

 exclusions:排除依赖

<dependency>                                    
    <groupId>com.sf</groupId>                   
    <artifactId>erui-common</artifactId>        
    <version>${erui.version}</version>          
    <exclusions>                                
        <exclusion>                             
            <artifactId>sflog-log4j</artifactId>
            <groupId>com.sf.sgs</groupId>       
        </exclusion>                            
    </exclusions>                               
</dependency>                                   

dependencyManagement:相当于一个对所依赖jar包进行版本管理的管理器

1:如果dependencies里的dependency自己没有声明version元素,那么maven就会倒dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version
2:如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。

<dependencyManagement>  
      <dependencies>  
            <dependency>  
                <groupId>org.springframework</groupId>  
                <artifactId>spring-core</artifactId>  
                <version>3.2.7</version>  
            </dependency>  
    </dependencies>  
</dependencyManagement>  
  
//会实际下载jar包  
<dependencies>  
       <dependency>  
                <groupId>org.springframework</groupId>  
                <artifactId>spring-core</artifactId>  
       </dependency>  
</dependencies>

 

 

 

 

END

 

 

以上是关于关于maven的主要内容,如果未能解决你的问题,请参考以下文章

maven web项目的web.xml报错The markup in the document following the root element must be well-formed.(代码片段

关于片段生命周期

关于js----------------分享前端开发常用代码片段

关于在各浏览器中插入音频文件的html代码片段

springcloud报错-------关于 hystrix 的异常 FallbackDefinitionException:fallback method wasn't found(代码片段

Jacoco和Tycho surefire的Eclipse RCP插件代码介绍