Better Builds With Maven 学习笔记(开始)

2024-01-16 09:20

本文主要是介绍Better Builds With Maven 学习笔记(开始),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论坛首页 Java企业应用论坛

Better Builds With Maven 学习笔记(开始)

全部 Hibernate Spring Struts iBATIS 企业应用 Lucene SOA Java综合 设计模式 Tomcat OO JBoss
浏览 1679 次
锁定老帖子 主题:Better Builds With Maven 学习笔记(开始)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者正文
发表时间:2008-09-30

开始之前

阅读笔记时请参阅原书英文版

开始

准备使用Maven

Maven默认读取<user_home>/.m2/settings.xml,通过proxy段的配置 设置代理信息。通过mirror段设置镜像服务器。这两个配置在M2_HOME/conf/settings.xml中都有范例。将M2_HOME /bin添加到环境变量。运行

mvn -version

查看使用的Maven版本信息。

找到的相关资料

配置环境变量M2_HOME为Maven2的安装目录,这样即使是在使用maven-ant-tasks时也读取M2_HOME/conf/settings.xml。

在mirrors段添加镜像配置,当前比较快的国内镜像是:

 <mirror><id>redv.com</id><url>http://mirrors.redv.com/maven2</url><mirrorOf>central</mirrorOf><!-- Shanghai, China --></mirror>

创建第一个Maven工程

使用Maven的 Archetype机制创建第一个工程。Archetype被定义为原始的模式或模型,从它可以生成同一类型的东西。在Maven中,Archetype是工程的模板,它与用户输入的一些信息组合起来生成一个全功能的Maven工程。

创建工程

mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app

将创建一个my-app目录,目录中包含了一个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.mycompany.app</groupId><artifactId>mvn-app</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>mvn-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>

src目录包含了构建、测试、创建文档、部署工程所需的输入信息。

编译应用程序源码

进入<my-app>目录,执行:

mvn compile

将编译源码。Maven遵循“约定优于配置”的原则,这是Maven的第一个原则。默认情况下,源码放在src/main/java中。这个默认值并不会 出现在POM文件中,实际上,它是从父级(根级)POM继承过来的。编译后的classes保存目录也是同样的方式处理的,默认它放在target/classes目录下。

是什么编译了应用程序源码?这是Maven的第二个原则“重用构建逻辑”。默认配置中配置了标准编译插件,它用于编译应用程序源码。同样的编译逻辑可以重用于其它的工程中。

上面了解了Maven如何找到应用程序源码,Maven怎样来编译应用源码,怎样调用编译插件。接下来的问题是,Maven如何能获取编译器插件? 在Maven的标准安装中,找不到编译插件,因为它不是与Maven发布版一起发布的。Maven将在需要插件时自动下载插件。

当第一次执行编译命令(或其它任何命令),Mave将下载这个命令需要的插件及其依赖的其它插件。下次再执行同样的命令时,Maven将不再下载它,命令执行将快很多。

编译测试源码执行单元测试

mvn test

将进行单元测试。这时Maven将下载更多需要的插件。在执行单元测试前,Maven将编译主代码。

mvn test-compile

编译测试代码。但是当执行mvn test时总是会先执行compile和test-compile。

打包并安装到本地仓库

生成jar包执行

mvn package

查看工程的POM文件可以看到packaging元素被设置为jar。Maven通过这个设置了解到需要生成一个JAR文件。

安装到本地仓库

mvn install

可以通过修改settings.xml的localRepository设置仓库的位置。

注意:Surefire插件(它执行test)将按特定的命名约定查看测试代码。默认情况下,下面的测试将被包含:

**/*Test.java
**/Test*.java
**/*TestCase.java

下面的将不被包含:

**Abstract*Test.java
**/Abstract*TestCase.java

Maven的重用构建逻辑使得即使是使用默认的POM文件也可以执行大量基础构建操作,例如:

mvn site

可以为工程生成一个简单网站。

mvn clean

将清除target目录下旧的构建数据。

mvn idea:idea

可以产生一个IDEA工程。

mvn eclipse:eclipse

生成一个eclipse工程。

处理Classpath资源

src/main/resources是Maven推荐的保存资源文件的目录。可以将需要打包到JAR文件的资源放到这个目录。Maven使用的规则是所有放在src/main/resources目录下的文件和目录都将打包到JAR中。

默认生成的JAR文件中包含了META-INF目录。在这个目录下可以找到MANIFEST.MF和pom.xml和pom.properties。你可以创建自己的mainfest文件,如果不创建Maven将自动生成一个。也可以包含自己的资源文件,例如在src/main/resources目录下添加一个application.properties文件,重新打包则资源文件也将也现在JAR包中。

pom.xml和pom.properties文件被打包到JAR以便由Maven的每个artifact生成的JAR包都是自描述的,并且允许你 包含自己的应用中的原数据。最简单的应用可能就是用于获取应用的版本号。操作POM文件需要使用Maven的工具,但是propertiest文件却可以 使用标准Java API。

处理测试用Classpath的资源

添加资源到单元测试classpath,可以将资源添加到src/test/resources目录。在单元测试中,使用下面的代码片段在测试阶段访问资源:

// Retrieve resource
InputStreamis= getClass().getResourceAsStream( "/test.properties");
// Do something with the resource

可以使用下面的配置覆盖maven-jar-plugin的默认配置:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifestFile>META-INF/MANIFEST.MF</manifestFile></archive></configuration>
</plugin>
过滤Classpath资源

有时资源文件中包含的一些值在构建时才能提供。Maven中可以使用资源过滤,动态的将资源属性值设置到资源文件中。 将资源文件中的属性值设置为${<property name>},这个属性可以是pom.xml或用户的settings.xml中定义的属性,或定义在外部properties文件,或都是系统属 性。

需要将pom.xml中将需要进行过滤处理的资源目录的filtering属性设置为true。例:

<project><modelVersion>4.0.0</modelVersion><groupId>com.mycompany.app</groupId><artifactId>my-app</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>Maven Quick Start Archetype</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><build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources></build>
</project>

使用资源过滤的举例:创建src/main/resources/META-INF/application.properties,内容设置为:

# application.properties
application.name=${project.name}
application.version=${project.version}

执行

mvn process-resources

target/classes目录下的application.properties文件内容将变为:

# application.properties
application.name=Maven Quick Start Archetype
application.version=1.0-SNAPSHOT

如果需要引用外部propertiest文件中的属性值,需要在pom.xml中添加对外部文件的引用。例如,创建一个外部资源文件src/main/filters/filter.properties:

# filter.properties
my.filter.value=hello!

将对它的引用添加到pom.xml中:

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

然后在application.propertiest文件中引用对应的属性:

# application.properties
application.name=${project.name}
application.version=${project.version}
message=${my.filter.value}

再次执行mvn process-resources命令时会将message替换为外部文件中my.filter.value属性对应的值。

也可以在pom文件的properties段定义这些属性值。例如:

<project><modelVersion>4.0.0</modelVersion><groupId>com.mycompany.app</groupId><artifactId>my-app</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>Maven Quick Start Archetype</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><build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources></build><properties><my.filter.value>hello</my.filter.value></properties>
</project>

资源过滤也可以获取系统属性,也可以是编译到Java中的(java.version或user.home),或使用Java -D参数在命令行指定的属性。例如将application.propertiest文件设置为:

# application.properties
java.version=${java.version}
command.line.prop=${command.line.prop}

然后执行下面的命令:

mvn process-resources "-Dcommand.line.prop=hello again"
防止过滤二进制资源

某些情况下我们不希望属性过滤处理某些资源文件。比如图像文件。

比如src/main/resources/images不希望被过滤,这时应该排除这些资源。pom.xml设置如下:

<project>[...]<build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><excludes><exclude>images/**</exclude></excludes></resource><resource><directory>src/main/resources</directory><includes><include>images/**</include></includes></resource></resources></build>[...]
</project>

使用Maven插件

配置Maven插件的参数。

例如,指定Java编译器只允许编译JDK 5.0的源码。可以在POM中添加设置:

<project>[...]<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.0</version><configuration><source>1.5</source><target>1.5</target></configuration></plugin></plugins></build>[...]
</project>

Maven 2的插件和工程的依赖很相似,在某种程度上它们确实如此。如果在本地找不到插件,则将自动下载插件,这更是与依赖关系的处理相同。插件与依赖同相样有groupId和version元素,但多数情况下这些元素不需要。

如果不指定groupId,则Maven将搜索org.apache.maven.plugins或org.codehause.mojo这两个groupId。你也可以在POM或settings.xml中指定goupId。

如果不指定版本Maven将尝试获取指定插件的最新版本。

通过mvn help:describe命令可以找到插件可选配置项。例如:

mvn help:describe -DgroupId=org.apache.maven.plugins \-DartifactId=maven-compiler-plugin -Dfull=true

也可以在

http://maven.apache.org/plugins/使用Maven Plugin Reference找到相关插件的配置信息。

 
论坛首页 Java企业应用版

跳转论坛:

这篇关于Better Builds With Maven 学习笔记(开始)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/612070

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学