`
ponlya
  • 浏览: 165495 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Maven 笔记三 摘录

 
阅读更多

很多笔记及实例摘录自《Maven权威指南》

可选依赖
    编译这个项目的时候你需要两个依赖类库,但是你不希望在使用你类库的项目中,这两个依赖类库同时作为传递性运行时依赖出现。

<dependency>
      <groupId>net.sf.ehcache</groupId>
      <artifactId>ehcache</artifactId>
      <version>1.4.1</version>
      <optional>true</optional>
</dependency>

 依赖版本界限
    可以指定一个满足给定依赖的版本界限。

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>[3.8,4.0)</version>
      <scope>test</scope>
</dependency>

  (, )不包含量词        [, ]包含量词
    JUnit <= 3.8.1    [,3.8.1]
传递性依赖 与 冲突解决
  

 <exclusions><exclusion>

 classifier
       如果你要发布同样的代码,但是由于技术原因需要生成两个单独的构件,你就要使用一个分类器(classifier). 例如,如果你想要构建两个单独的构件成JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,它们有同样的groupId:artifactId:version组合。

 

项目继承

指定parent-a的POM的相对位置

<parent>
        <groupId>org.sonatype.mavenbook</groupId>
        <artifactId>a-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../a-parent/pom.xml</relativePath>
</parent> 

 过滤资源

<build>
	  <filters>
		<filter>src/main/filters/default.properties</filter>
	  </filters>
	  <resources>
		<resource>
		  <directory>src/main/resources</directory>
		  <filtering>true</filtering>
		</resource>
	  </resources>
</build>

 配置额外的资源目录

<build> 
	  <resources>
		<resource>
		  <directory>src/main/images</directory>
		</resource>
	  </resources> 
</build>

 过滤脚本资源

<resources>
		<resource>
		  <filtering>true</filtering>
		  <directory>/usr/local/xxx
		  <includes>
			<include>run.bat</include>
			<include>run.sh</include>
		  </includes>
		  <targetPath>/usr/xxxx
		</resource>
		<resource>
		  <directory>/usr/local/xxxx
		</resource>
</resources>

 初始的站点描述符

<project name="Sample Project">
  <bannerLeft>
    <name>Sonatype</name>
    <src>images/logo.png</src>
    <href>http://www.sonatype.com</href>
  </bannerLeft>
  <body>
    <menu name="Sample Project">
      <item name="Overview" href="index.html"/>     
    </menu>
    <menu ref="reports"/>
  </body>
</project>

 
给站点描述符添加Banner Left和Banner Right

<project name="Sample Project">
  <bannerLeft>
    <name>Left Banner</name>
    <src>images/banner-left.png</src>
    <href>http://www.xxx.com</href>
  </bannerLeft>
 
  <bannerRight>
    <name>Right Banner</name>
    <src>images/banner-right.png</src>
    <href>http://www.xxx.com</href>
  </bannerRight>
  ...
</project>

 配置发布日期格式

<project name="Sample Project">
  ...
  <publishDate position="navigation-bottom" format="yyyy-MM-dd"/>
  ...
</project>

 

 Maven套件

<pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.2-beta-2</version>
          <executions>
            <execution>
              <id>create-project-bundle</id>
              <phase>package</phase>
              <goals>
                <goal>single</goal>
              </goals>
              <configuration>
                <descriptorRefs>
                  <descriptorRef>project</descriptorRef>
                </descriptorRefs>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
    
    <plugins>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
        </plugin>
      </plugins> 

     Assembly插件原生支持多种归档格式jar
        zip,tar,bzip2,gzip,tar.gz,tar.bz2,rar,war,ear,sar,dir
    <assembly>
      <id>bundle</id>
      <formats>
        <format>zip</format>
      </formats>
      ...
    </assembly>
    
files套件
        files元素是套件描述符中最简单的部分,它被设计成定义那些相对与你项目目录的路径。
        使用该元素,你就可以完全控制哪些文件被包含到你的套件中,它们如何被命名,以及它们在归档中的位置。      

 <files>
            <file>
              <source>target/my-app-1.0.jar</source>
              <outputDirectory>lib</outputDirectory>
              <destName>my-app.jar</destName>
              <fileMode>0644</fileMode>
            </file>
</files>

 ”会将你项目的JAR文件包含到套件的lib/目录下,同时除去了文件名的版本部分,使最终的文件名为my-app.jar。
    该描述符会让这个JAR文件对于所有人可读,对于拥有者可写(这就是0664模式的意思,这里使用了Unix四位十进制数的权限标记)
FileSets 元素    
    fileSets应用于那些相对于你的项目结构有一个明确位置的文件。  

 <fileSets>
        <fileSet>
          <directory>src/main/java</directory>
        </fileSet>
</fileSets>

使用fileSet包含文件   

<assembly>
  ...
  <fileSets>
        <fileSet>
          <directory>src/main/java</directory>
          <outputDirectory>src/main/java</outputDirectory>
          <includes>
            <include>**</include>
          </include>
          <useDefaultExcludes>true</useDefaultExcludes>
          <fileMode>0644</fileMode>
          <directoryMode>0755</directoryMode>
        </fileSet>
      </fileSets>
      “**”表示匹配一个或者多个目录,“*”表示匹配文件名的任一部分,“?”表示匹配文件名中的任意单个字符。
</assembly> 

 dependencySets
    files和fileSets只是处理你项目中的文件,而依赖文件不存在于你的项目中。
    自定义依赖输出目录       

<assembly>
          ...
          <dependencySets>
            <dependencySet>
              <outputDirectory>org.sonatype.mavenbook</outputDirectory>
              <outputFileNameMapping>
                ${module.artifactId}.${module.extension}
              </outputFileNameMapping>
            </dependencySet>
          </dependencySets>
          ...
</assembly>

使用范围来定义依赖组,依赖排除和包含
       

<assembly>
          ...
          <dependencySets>
            <dependencySet>
              <scope>provided</scope>
              <outputDirectory>lib/content-zh</outputDirectory>
            </dependencySet>
            <dependencySet>
              <scope>runtime</scope>
              <outputDirectory>
                webapps/${webContextName}/WEB-INF/lib
              </outputDirectory>
              <excludes>
                <exclude>*:zip</exclude>
              </excludes>
            </dependencySet>
            <dependencySet>
              <scope>runtime</scope>
              <outputDirectory>
                webapps/${webContextName}/resources
              </outputDirectory>
              <includes>
                <include>*:zip</include>
              </includes>
              <unpack>true</unpack>
            </dependencySet>
          </dependencySets>
          ...
</assembly>

     在依赖拆解的时候排除文件   

<asembly>
      ...
      <dependencySets>
        <dependencySet>
          <scope>runtime</scope>
          <outputDirectory>
            webapps/${webContextName}/resources
          </outputDirectory>
          <includes>
            <include>*:zip</include>
          </includes>
          <unpack>true</unpack>
          <unpackOptions>
            <excludes>
              <exclude>**/LICENSE*</exclude>
            </excludes>
          </unpackOptions>
        </dependencySet>
      </dependencySets>
      ...
</assembly>

 使用moduleSet包含和排除模块   

<assembly>
      ...
      <moduleSets>
        <moduleSet>
          <includeSubModules>false</includeSubModules>
          <excludes>
            <exclude>
              com.mycompany.application:secret-sauce
            </exclude>
          </excludes>
          <sources>
            <outputDirectoryMapping>
              ${module.basedir.name}
            </outputDirectoryMapping>
            <excludeSubModuleDirectories>
              false
            </excludeSubModuleDirectories>
            <fileSets>
              <fileSet>
                <directory>/</directory>
                <excludes>
                  <exclude>**/target</exclude>
                </excludes>
              </fileSet>
            </fileSets>
          </sources>
        </moduleSet>
      </moduleSets>
      ...
</assembly>

 在套件中包含模块的JavaDoc  

 <assembly>
      ...
      <moduleSets>
        <moduleSet>
          <binaries>
            <attachmentClassifier>javadoc</attachmentClassifier>
            <includeDependencies>false</includeDependencies>
            <outputDirectory>apidoc-jars</outputDirectory>
          </binaries>
        </moduleSet>
      </moduleSets>
      ...
</assembly>

 在套件中包含模块构件和依赖   

<assembly>
      ...
      <moduleSets>
        <moduleSet>
          <binaries>
            <outputDirectory>
              ${module.artifactId}-${module.version}
            </outputDirectory>
            <dependencySets>
              <dependencySet/>
            </dependencySets>
          </binaries>
        </moduleSet>
      </moduleSets>
      ...
</assembly>

     所有项目的内容就会被打包在一起,然后可以直接解压添加到现存web应用中(为了添加一个扩展特性)。
    然而,如果你的团队构建了很多个web片段项目,那么你就会想要重用该描述符,而非复制它。
    为了将该描述符以构件的形式部署,我们就要将其放到一个项目中,位于src/main/resources/assemblies目录。
    |-- pom.xml
    `-- src
        `-- main
            `-- resources
                `-- assemblies
                    `-- web-fragment.xml
   

<assembly>
      <id>war-fragment</id>
      <formats>
        <format>zip</format>
      </formats>
     <includeBaseDirectory>false</includeBaseDirectory>
      <dependencySets>
        <dependencySet>
          <outputDirectory>WEB-INF/lib</outputDirectory>
        </dependencySet>
      </dependencySets>
      <fileSets>
        <fileSet>
          <directory>src/main/webapp</directory>
          <outputDirectory>/</outputDirectory>
          <excludes>
            <exclude>**/web.xml</exclude>
          </excludes>
        </fileSet>
      </fileSets>
    </assembly>

     默认情况下,Maven会将整个src/main/resources目录打包到最终的jar中,这里,如果没有额外的配置,套件描述符也就会被打包。

分享到:
评论

相关推荐

    maven学习笔记maven学习笔记

    maven学习笔记maven学习笔记maven学习笔记

    尚硅谷Maven课程笔记代码资源

    三、Maven生命周期与插件 Maven的生命周期由多个阶段(如编译、测试、打包、部署等)组成,每个阶段对应一组特定的目标(goal)。开发者可以通过命令行指定执行某个阶段,或者让Maven按顺序执行整个生命周期。同时,...

    黑马maven笔记,第一天

    ### 黑马Maven笔记详解 #### Maven简介与特点 Maven是一款强大的项目管理和构建工具,作为Apache基金会下的一个开源项目,它完全采用Java语言编写,主要用于管理Java项目。Maven通过标准化项目构建过程和依赖管理...

    黑马maven笔记第二天

    ### 黑马Maven笔记第二天知识点总结 #### Maven的核心优势 **1. 统一管理JAR包** - **节省空间**:Maven通过中央仓库管理所有项目的依赖,避免了重复下载相同JAR包的问题,有效减少了硬盘空间的占用。 - **依赖...

    Maven笔记.pdf

    Maven定义了三个主要的生命周期:Clean、Default和Site。 #### Maven解决的主要痛点 - **Jar包管理难**:Maven通过中央仓库提供了一站式的jar包下载服务,开发者无需手动寻找和下载jar包,直接在`pom.xml`中声明...

    Maven笔记与资料.zip

    Maven的生命周期包括三个主要阶段:清理(clean)、默认(default)和站点(site)。清理阶段用于删除旧的构建产物;默认阶段包括编译(compile)、测试(test)、打包(package)、验证(verify)、集成测试...

    Maven笔记Maven笔记Maven笔记

    Maven的安装: (首先保证JDK版本在1.6以上) 1: 通过配置MAVEN_HOME 和 %% %MAVEN_HOME%\bin 然后进行mvn -version 测试 掌握 -Xms 与 -Xmx的相关配置 2: Maven目录分析: 2.1: bin: 含有mvn运行的脚本 2.2...

    maven笔记:maven-overlay-实战笔记

    【标题】:“maven笔记:maven-overlay-实战笔记” 在 Maven 的世界里,"overlay" 是一个重要的概念,主要用于Web项目的构建和部署。Maven overlay 技术允许你将多个项目的输出“重叠”在一起,形成一个新的项目,...

    maven笔记+教案

    ** Maven详解:构建Java项目的专业工具 ** Maven是一个基于项目对象模型(Project Object Model,POM)的概念,用于管理并构建Java项目。它通过一个简单的配置文件(pom.xml),自动化项目的构建、报告和依赖管理,...

    Maven 教程:基础篇-尚硅谷学习笔记 2022年

    **Maven教程:基础篇——尚硅谷学习笔记 2022年** Maven是一个强大的Java项目管理和构建工具,由Apache软件基金会开发。它通过提供一个标准的项目对象模型(Project Object Model,POM)来简化项目的构建过程,并...

    maven笔记t-JavaWeb

    5. **生命周期与构建阶段**:Maven有三个基本生命周期,分别是`clean`、`default`和`site`,其中`default`生命周期包含了常见的构建阶段,如`compile`、`test`、`package`、`install`和`deploy`,它们分别对应编译源...

    最新maven视频教程加源码笔记

    最新maven视频教程加源码笔记,内容完整有保证,是学习maven的不可多得的教程。

    maven笔记.docx

    【Maven笔记】 Maven是一个强大的Java项目管理工具,它主要解决了在软件开发过程中遇到的一系列问题,如依赖管理、项目构建以及环境一致性等。通过使用Maven,开发者可以更高效地管理和构建Java项目,避免手动复制...

    maven笔记.zip

    ** Maven 概述 ** Maven 是一个强大的项目管理和构建工具,主要应用于Java项目。它通过提供一套标准化的构建过程,使得项目的...通过学习Maven笔记,开发者可以更好地掌握这一强大的工具,提升项目开发的专业水平。

    Maven开发者笔记

    《Maven开发者笔记》是一本面向Java开发者的实用指南,旨在帮助读者深入理解和掌握Maven这一强大的构建工具。Maven不仅简化了项目的构建过程,还提供了项目管理的标准化方法,使得依赖管理和构建流程变得规范而高效...

    Maven高级-黑马程序员学习笔记

    ** Maven高级技术详解 ** Maven,作为Java项目管理和构建工具,因其强大的自动化构建功能而备受开发者喜爱。本文将深入探讨Maven的高级特性,包括多模块开发、继承与聚合,以及私有仓库(私服)的操作,这些都是在...

    java-Maven笔记.docx

    Maven 是 Java 项目中一种流行的构建工具,能够帮助开发者更好地管理项目依赖关系、编译、打包和发布。下面是 Maven 的一些知识点: 1. Maven 的必要性:Maven 之所以需要,是因为在没有 Maven 之前,开发者需要...

Global site tag (gtag.js) - Google Analytics