Maven学习第一篇

来源:互联网 发布:淘宝好评晒图怎么删掉 编辑:程序博客网 时间:2024/05/01 17:16

.maven目录结构简介

    pom.xml  是配置文件
    /
src 源代码目录
        /src/main
工程源代码目录
            /src/main/java
工程java源代码目录
            /src/main/resource
工程的资源目录
           /src/main/webapp
工程的web目录

        /src/test 单元测试目录
           /src/test/java
   /target
输出目录,所有的输出物都存放在这个目录下
        /target/classes
编译之后的class文件

 

      每一个阶段的任务都知道怎么正确完成自己的工作,比如compile任务就知道从src/main/java下编译所有的java文件,并把它的输出class文件存放到target/classes中。对maven来说,采用"约定优于配置"的策略可以减少修改配置的工作量,也可以降低学习成本,更重要的是,给项目引入了统一的规范。

 

二.pom.xml介绍

 

Project Object Model,项目对象模型。

通过xml格式保存的pom.xml文件。

作用类似antbuild.xml文件,功能更强大。

该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。一个完整的pom.xml文件,放置在项目的根目录下

 

下面让我们来了解一下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.huawei.bdpp</groupId>

         <artifactId>bdpp-frame</artifactId>

         <version>1.0-SNAPSHOT</version>

         <packaging>war</packaging>

         <name>bdpp-frame Maven Webapp</name>

         <url>http://maven.apache.org</url>    

                 <properties>

                          <project.build.sourceEncoding>

                                    UTF-8

                            </project.build.sourceEncoding>

                            <version.spring3>3.2.2.RELEASE</version.spring3>

                            <version.struts2>2.3.15.3</version.struts2>

                            <version.ibatis>2.3.4.726</version.ibatis>

                            <version.slf4j>1.7.2</version.slf4j>

                            <version.logback>1.0.9</version.logback>

                            <maven.compiler.source>1.7</maven.compiler.source>

                            <maven.compiler.target>1.7</maven.compiler.target>

             </properties>      

                 <dependencies>

                            <!-- spring3 -->

                            <dependency>

                                    <groupId>org.springframework</groupId>

                                    <artifactId>spring-core</artifactId>

                                    <version>${version.spring3}</version>

                </dependency>

         </dependencies>

</project>

 

projectpom.xml文件中的顶层元素; 

 
modelVersion
:指明POM使用的对象模型的版本。这个值很少改动。

 groupId
:定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联。譬如在googlecode上建立了一个名为myapp的项目,

          那么groupId就应该是com.googlecode.myapp 

 artifactId
: 定义了当前Maven项目在组织中唯一的ID,可以理解为项目中的模块, 模块为Maven中最小单位构件
 

 version
:项目产品的版本号。Maven帮助你管理版本,可以经常看到SNAPSHOT这个版本,表明项目处于开发阶段。 Version也可以用区间表达式来表示,比
  
          如(2.0,)表示>2.0[2.0,3.0)表示2.0<=ver<3.0;多个条件之间用逗号分隔,比如[1,3),[5,7]

Packaging: 打包的格式,可以为:pom ,jar, maven-plugin , ejb , war , ear , rar , par

name:项目的显示名称,通常用于maven产生的文档中。

url:指定项目站点,通常用于maven产生的文档中。 

description:描述此项目,通常用于maven产生的文档中。

scope 作用域限制
取值:
  compile(
编译范围)
     compile
是默认的范围;如果没有提供一个范围,那该依赖的范围就是

       
编译范围。编译范围依赖在所有的classpath中可用,同时它们也
       
会被打包。
  provided
(已提供范围)
     provided
依赖只有在当JDK或者一个容器已提供该依赖之后才使用。
   
例如,如果你开发了一个web应用,你可能在编译classpath中需要可
   
用 的Servlet API来编译一个servlet,但是你不会想要在打包好的WAR
   
中包含这个Servlet API;这个Servlet API JAR由你的应用服务器或

   
servlet容器提供。已提供范围的依赖在编译classpath(不是运行
   
时)可用。它们不是传递性的,也不会被打包

 runtime(运行时范围)
runtime
依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。

test(测试范围)
test
范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。

system(系统范围)
system
范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。 如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素 。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。

type 一般在pom引用依赖时候出现,其他时候不用

optional 是否可选依赖

对于一个项目中依赖关系列表是我们需要关注的:
<dependencies>

                   <!-- spring3 -->

                   <dependency>

                           <groupId>org.springframework</groupId>

                            <artifactId>spring-core</artifactId>

                           <version>${version.spring3}</version>

             </dependency>

     </dependencies>

 

.pom.xml中定义一些属性,然后在其他地方用${xxx}进行引用。比如:

Xml代码

  1. <project>  
  2.     <modelVersion>4.0.0</modelVersion>  
  3.     ...  
  4.     <properties>  
  5.         <var1>value1</var1>  
  6.     <my.filter.value>hello</my.filter.value>
  7.     </properties>  
  8. </project>  

 

1.系统的环境变量通过env.前缀引用比如env.PATH
   2.
所有pom中的元素都可以用project.前缀进行引用,以下是部分常用的
     
${project.build.directory }
     
${project.build.outputDirectory}

   ${project.name }
   ${project.version
}
     
${project.build.finalName }

3.settings.xml中的设定都可以通过settings.前缀进行引用
     
例如:${settings.localRepository }

4.用户在pom中定义的自定义属性

<project>

       ...

       <properties>

        <my.filter.value>hello</my.filter.value>

       </properties>

       ...

</project>

则引用 ${my.filter.value }就会得到值 hello 

 

.maven指定编码

 

         <project>
           ...
         <properties>
               <project.build.sourceEncoding>

                  UTF-8

              </project.build.sourceEncoding>

        </properties>
         ...
    </project>

 

.maven目录结构不是标准的,如何让maven支持

   指定source目录和test-source目录即可。

<build>
                <directory>target</directory>
                 <sourceDirectory>src</sourceDirectory>
                 <scriptSourceDirectory>js/scripts</scriptSourceDirectory>
                 <testSourceDirectory>test</testSourceDirectory>
                 <outputDirectory>bin</outputDirectory>
                 <testOutputDirectory>bin</testOutputDirectory>
</build>

 

. 如何给插件指派参数?比如我要设置一些编译参数

 

         以下内容设定编译器编译java1.5的代码

<project>

    ...

    <build>

        ...

        <plugins>

            <plugin>

                <artifactId>maven-compiler-plugin</artifactId>

                <configuration>

                    <source>1.5</source>

                    <target>1.5</target>

                </configuration>

            </plugin>

        </plugins>

        ...

    </build>

    ...

</project>

0 0
原创粉丝点击