快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

葡京娱乐场7098app:初学maven(4)使用maven ant task实现非标准打包



maven很强大年夜,然则总有些工作干起来不是轻车熟路,没有应用ant时那种想怎么干就怎么干的流通感。尤其当要打包一个特殊(相对maven的标准架构而且)时,常有葡京娱乐场7098app不知所措的感到。当然这个应该和自己对maven的懂得不敷有关,终究,“初学maven”嘛。

然则maven在依附治理方面其实是太强大年夜了,太爱好,退回原本的ant要领完全弗成能,我想用过maven的人,一样平常是不会有回到原本在cvs,subversion中checkin/checkout n个jar包的期间,仅此一项来由就足够继承坚持应用maven了。

然而ant的机动又难于忘记,尤其是从ant的build.xml一起走来的人,老是回不知不觉间想到ant的美好。鱼与熊掌,我都想要。近来想打包一个java利用,很简单但即不是标准的j2ee appication也不是web application, 用maven完全不知道该怎么打包,package出来的完全不是我葡京娱乐场7098app想要的,在网上四处google maven资料的时刻,总有用回ant拉倒的感动。

先交卸一下背景吧,我要打包的法度榜样,是这个样子:

demo1

|____lib

|_____demo1.jar

|_____奸淫**.jar

|_____奸淫**.jar

|____config

|_葡京娱乐场7098app____奸淫**.properties

|_____奸淫**.xml

|____log

|_____奸淫**.log

|____run.bat

|____run.sh

这个利用的打包模式很简单,一个bat或者sh脚本用来履行,lib目录下寄放所有的jar包,包括自己的源代码编译打包的jar和第三方包。config下是设置设置设备摆设摆设文件,这些文件必要在安装时或者运行前改动,比如 监听的端口啊,数据库信息之类的。log目录寄放日志文件。着末打包的产物是一个zip包(或者tar,tar.gz)。

碰到的问题,便是maven标准的打包要领中根本不斟酌类似的环境,什么jar,ear,war完全不适用。而且maven有些理念也诧异,比如maven标准的config目录是src/main/config,然则这个目录里面的设置设置设备摆设摆设文件默认会打包到jar包中,晕,都在jar里面了还让人怎么改啊?

本着只管即便只用maven不用ant的设法主见,我在maven的资猜中看了良久,没有找到办理的措施。晕,难道大年夜家都只打包标准的ear,jar,war,只有我这样无聊的人才会有这种打包的需求?

几经寻觅和探索,着末发明,maven ant tasks彷佛是一个不错的选择。带着mavenanttasks的官方文档和google上搜到的几篇文章,开始考试测验,成功实现功能。现在将历程和措施share给大年夜家。

首先建立java项目anttaskdemo1,按照maven的保举,文件布局如下:

anttaskdemo1

|____src/main/java

|____src/main/config

|____src/main/bin

|____src/main/resources

|____src/test/java

|____src/test/resources

|____target

|____build.properties

|____build.xml

|____pom.xml

此中src/main/java下放java代码;src/main/resources下放一个*.properties文件,这个资本文件是打包到jar中,内容打包之后不必要改变的。src/main/config下放一个标准的log4j.xml,这个是有在安装运行前临时改动的必要的。src/main/bin下放置可履行文件。

1. 首先看pom.xml,标准内容,很简单,象征性的加入几个依附

commons-codec

commons-codec

1.3

log4j

log4j

1.2.13

compile

org.testng

testng

5.8

test

jdk15

一步一步来讲吧:

3.1 最紧张的一步,init_maven

${M2_REPO},这个是eclipse中通用的指向maven local repository的变量,大年夜家应用maven敕令建立eclipse项目时会碰到它。我们在这里可以直接应用这个变量来造访maven local repository。假如没有建立这个变量,请自行建立,上面注释中有具体阐明。假如在eclispe之外比如敕令行直接运行ant打包,则可以经由过程设置build.properties文件中的“M2_REPO=G:/soft/maven/localRepository”来指定。(这里用到ant的一个特点,属性一旦被赋值就不能改动,是以第一次赋值有效,在eclispe中运行,M2_REPO会应用eclispe中设置的值,假如eclispe没有设置或者敕令行直接运行,M2_REPO属性会在build.properties文件装载时设置。)

装载ok后,接着是调用artifact:pom和artifact:dependencies 义务来指定pom.xml文件,再获得dependencies信息,后面的编译打包会应用到。留意useScope="runtime",这个是为了着末打包时应用,只复制runtie时必要的jar包。

是用来打印maven相关的一些信息的,比如maven下的几个build目录。artifact:pom义务装载了全部pom,是以在后面可以造访到pom的信息,比如${maven.project.build.sourceDirectory}是java源代码目录,${maven.project.build.finalName}是终极的名称。

pom的内容可以参考这两个官方资料:

1) maven model

http://maven.apache.org/ref/2葡京娱乐场7098app.0.9/maven-model/maven.html

2) Introduction to the POM

http://maven.apache.org/guides/introduction/introduction-to-the-pom.html

标准目录结构可以参考这个官方资料:

http://maven.apache.org/guides/introduction/introduction-to-the-sta葡京娱乐场7098appndard-directory-layout.html

等都无效。找了好久都没有找到资料,只好作罢。直接写逝世src/main/resources吧。

3.3 jar

和compile类似,标准的ant jar,然后经由过程造访pom来获得相关的路径信息和打包文件名。留意这里的文件名和路径和maven的做法同等,也便是说和履行maven的compile敕令结果是一样的。

3.4 package, zip

package_prepare, copyLib, copyConfig, copyBin 这几个target都简单,体力活而已。zip也是。

4. 总结

上面的内容虽多,然则总结起来就只有两点:

1. maven ant task可以将maven的功能和ant的机动性统一路来,对付非标准的打包环境异常适用

2. maven ant task的应用并不难,不过必要掌握不少maven的基础常识,比如pom,标准目录结构等。

别的,彷佛,ant + Ivy会是更好的选择?

相关文章:

初学maven(1)-常见小问题集锦

初学maven(2)-maven/artifactory/m2eclipse安装全历程

初学maven(3)-应用nexus替代artifactory作为maven私服

初学maven(4)-应用maven ant task实现非标准打包

初学maven(5)-应用assembly plugin实现自定义打包

您可能还会对下面的文章感兴趣: