文档章节

Maven构建应用程序常用配置

liuyuantao
 liuyuantao
发布于 2016/04/09 10:06
字数 939
阅读 0
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

使用Maven来构建应用程序,可以非常方便地管理应用相关的资源。众所周知,应用程序中涉及到的一些依赖关系,如Java应用程序依赖jar文件,如果只是手动找到相应的资源,可能需要花费一些时间。而且,即使已经积累了库文件,在未来应用程序升级以后,还要考虑到依赖库文件的升级情况,再次搜索收集。
还有一个问题,对应用程序依赖文件的管理是个非常复杂工作,占用存储空间不说,还可能因为应用之间的版本问题导致依赖冲突。使用Maven的pom模型来构建应用程序,可以更加有效地的管理,而且配置内容非常清晰(有时多了,可能pom文件显得有点臃肿)。
下面将常用的Maven配置,整理如下,以备参考。首先,整理一个简单的目录,作为快速查询之用:

设置字符集
拷贝src/main/resources/资源文件
编译代码
、编译打包成jar文件
构建测试用例配置
输出依赖jar文件到指定目录
配置指定的repository
将应用及其依赖jar文件打成一个jar文件
具体配置的详细内容,如下所示:

1、设置字符集

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
在需要设置字符集的地方,引用${project.build.sourceEncoding}即可。

2、拷贝src/main/resources/资源文件

<build>
	<pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.5</version>
				<executions>
					<execution>
						<id>copy-resources</id>
						<phase>package</phase>
						<goals>
							<goal>copy-resources</goal>
						</goals>
						<configuration>
							<encoding>${project.build.sourceEncoding}</encoding>
							<outputDirectory>${project.build.directory}</outputDirectory>
							<resources>
								<resource>
									<directory>src/main/resources/</directory>
									<includes>
										<include>*.properties</include>
										<include>*.xml</include>
									</includes>
									<filtering>true</filtering>
								</resource>
							</resources>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</pluginManagement>
</build>

3、编译代码

<build>
	<pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.5</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
		</plugins>
	</pluginManagement>
</build>

可以指定源代码编译级别。

4、编译打包成jar文件

<build>
	<pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>jar</goal>
						</goals>
						<configuration>
							<classifier>without-configs</classifier>
							<excludes>
								<exclude>*.properties</exclude>
								<exclude>*.xml</exclude>
							</excludes>
						</configuration>
					</execution>
				</executions>
			</plugin>
	</pluginManagement>
</build>
可以指定打包后jar文件的文件名后缀,同时可以设置是否将配置文件也打包到jar文件中。

5、构建测试用例配置
<build>
	<pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.9</version>
				<configuration>
					<skip>true</skip>
					<testFailureIgnore>true</testFailureIgnore>
				</configuration>
			</plugin>
		</plugins>
	</pluginManagement>
</build>

构建应用时,可以配置是否执行测试用例代码,也可以配置如果测试用例未通过是否忽略。

6、输出依赖jar文件到指定目录

<build>
	<pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.eclipse.m2e</groupId>
				<artifactId>lifecycle-mapping</artifactId>
				<version>1.0.0</version>
				<configuration>
					<lifecycleMappingMetadata>
						<pluginExecutions>
							<pluginExecution>
								<pluginExecutionFilter>
									<groupId>org.apache.maven.plugins</groupId>
									<artifactId>maven-dependency-plugin</artifactId>
									<versionRange>[2.0,)</versionRange>
									<goals>
										<goal>copy-dependencies</goal>
										<goal>unpack</goal>
									</goals>
								</pluginExecutionFilter>
								<action>
									<ignore />
								</action>
							</pluginExecution>
						</pluginExecutions>
					</lifecycleMappingMetadata>
				</configuration>
			</plugin>
		</plugins>
	</pluginManagement>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-dependency-plugin</artifactId>
			<version>2.8</version>
			<executions>
				<execution>
					<id>copy-dependencies</id>
					<phase>package</phase>
					<goals>
						<goal>copy-dependencies</goal>
					</goals>
					<configuration>
						<outputDirectory>${project.build.directory}/lib</outputDirectory>
						<overWriteReleases>false</overWriteReleases>
						<overWriteSnapshots>false</overWriteSnapshots>
						<overWriteIfNewer>true</overWriteIfNewer>
					</configuration>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

上面,和pluginManagement并列的plugins元素中配置的是拷贝依赖jar文件到target/lib目录下面,如果在Eclipse中出现maven-dependency-plugin (goals “copy-dependencies”, “unpack”) is not supported by m2e错误,上面pluginManagement元素中的配置,可以解决这个错误提示。

7、配置指定的repository

<repositories>
	<repository>
		<id>cloudera</id>
		<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
	</repository>
</repositories>
如果我们需要要的一些依赖jar文件在maven中央repository中没有,可以在pom文件中配置特定的repository,一般需要配置id和url。

8、将应用及其依赖jar文件打成一个jar文件
<build>
	<plugins>
		<plugin>
			<artifactId>maven-assembly-plugin</artifactId>
			<configuration>
				<archive>
					<manifest>
						<mainClass>org.shirdrn.solr.cloud.index.hadoop.SolrCloudIndexer</mainClass>
					</manifest>
				</archive>
				<descriptorRefs>
					<descriptorRef>jar-with-dependencies</descriptorRef>
				</descriptorRefs>
			</configuration>
			<executions>
				<execution>
					<id>make-assembly</id>
					<phase>package</phase>
					<goals>
						<goal>single</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

本文转载自:http://blog.csdn.net/u013510614/article/details/50503602

liuyuantao
粉丝 5
博文 134
码字总数 27666
作品 0
武汉
高级程序员
私信 提问
Maven常用插件的使用Case

Maven是Java工程常用的项目管理工具,通过Maven可以管理项目的各个生命周期。Maven本质是一个插件框架,本身并不执行任何构建任务,所有的工作都是交给插件来完成的。熟练使用Maven插件,可以...

huamingweiwen
2015/08/12
0
0
maven常用插件记录

1.忽略单元测试失败 插件文档:http://maven.apache.org/plugins/maven-surefire-plugin/testmojo.html 插件参数表达式: testFailureIgnore Set this to true to ignore a failure during ......

JAVA_NINA
2016/11/07
22
0
Spring Boot学习笔记-快速示例

笔者最近在学习Spring Boot的参考指南,很兴奋!因为Spring Boot中有太多的亮点值得点赞了,笔者认为,当你从无到有,经历过所有的痛点或迷茫之后,突然有一个“神器”帮你解决了之前的困惑时...

chace0120
2015/12/20
658
0
常用Maven插件介绍(下)

转自:http://www.infoq.com/cn/news/2011/05/xxb-maven-8-plugin 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代...

long0404
2016/06/16
0
0
值得使用的Spring Boot

2013年12月12日,Spring发布了4.0版本。这个本来只是作为Java平台上的控制反转容器的库,经过将近10年的发展已经成为了一个巨无霸产品。不过其依靠良好的分层设计,每个功能模块都能保持较好...

无敌西瓜
2015/03/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

有哪些常用的命名git分支实例的例子? [关闭]

现在,我已经使用本地git存储库与我的组的CVS存储库进行了几个月的交互。 我已经制作了一个几乎神经质的分支,其中大部分幸运地合并回我的行李箱。 但是命名开始成为一个问题。 如果我有一个...

javail
2分钟前
0
0
在virtualenv中使用不同的Python版本

我有一个目前使用python 2.5.4运行的Debian系统。 我正确安装了virtualenv,一切正常。 我是否可以将virtualenv与其他版本的Python一起使用? 我编译了Python 2.6.2,并希望将其与一些virtu...

技术盛宴
17分钟前
3
0
保证金术语参考

术语,定义 1.钱包, 余额. ON THE ENCHANGED CONVERGENCE OF STANDARD LATTICE METHODS FOR OPTION PRICING...

MtrS
20分钟前
2
0
x006-函数和模块的使用

函数和模块的使用 在Python中可以使用def关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数...

伟大源于勇敢的开始
30分钟前
2
0
为什么面试必问线程状态?你的回答满分了吗

看很多同学的面经、网上的面试资料,都不约而同的提到了一个基础问题:“你知道线程有几种状态吗?状态之间的扭转是怎样的?”,有准备的同学都知道有五种:New(新建)、Runnable(可运行)...

Z_J_H
31分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部