近期maven使用的一些记录_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 近期maven使用的一些记录

近期maven使用的一些记录

 2013/10/25 12:53:17  winclass  程序员俱乐部  我要评论(0)
  • 摘要:最近在将一个ant工程转化到maven原始工程使用了OSGI,包括数个bundle工程,一个配置兼打包的工程,一个web工程。运行时war包的lib内需要包括bundle的依赖。使用run-jetty-run插件运行测试。ANT打包,打包过程主要流程:编译,测试各bundle复制配置文件复制网站内容,加入外部资源压缩jswar,复制lib最终结果结构:tar--conf|-bundle--*.jar(bundles)|-war|-js|-WEB-INF|-lib-*.jar(web的依赖
  • 标签:使用 Maven

最近在将一个ant工程转化到maven

原始工程使用了OSGI,包括数个bundle工程,一个配置兼打包的工程,一个web工程。

运行时war包的lib内需要包括bundle的依赖。

使用run-jetty-run插件运行测试。ANT打包,打包过程主要流程:

  1. 编译,测试各bundle
  2. 复制配置文件
  3. 复制网站内容,加入外部资源
  4. 压缩js
  5. war,复制lib
  6. 最终结果结构:

tar--conf

? ? ? |-bundle--*.jar(bundles)

? ? ? |-war

? ? ? ? ? |-js

? ? ? ? ? |-WEB-INF

? ? ? ? ? ? ? ? ? ? |-lib-*.jar(web的依赖,bundle的依赖)

原本的ANT打包也是很精巧的,还用到的自己扩展的Task等。

?

maven化的过程:

  1. 建立主工程,将每个项目作为module,主要为了方便版本管理,发布管理。
  2. bundle.jar这个比较简单,不赘述
  3. conf module:conf打包简单,使用assembly plugin;bundle:按说这里可以使用assembly plugin的ModuleSets,但是怎么试都有问题,只能在parent工程里使用package assemble:single才可以,在子工程内使用userAllProejcts都没用,总是说Fileter not fit 这样子。查了网上的资料,看了sonatype的best practice都推荐使用DependencySets,于是改了,又有个问题就是assembly plugin 不会查找local repository,在脱机的时候很不方便;又改为用dependency plugin copy文件,再用assembly FileSets打包;这里有一些细节要注意,因为希望的目录结构是zip内一个目录bundle,里面就是各种jar,所以要写成这样子:
    class="xml" name="code"><includeBaseDirectory>false</includeBaseDirectory>
        <fileSets>
            <fileSet>
                <directory>${project.build.directory}/bundle</directory>
                <includes>
                    <include>*.*</include>
                </includes>
                <outputDirectory>bundle</outputDirectory>
            </fileSet>
        </fileSets>
    ?includeBaseDirectory写成true目录会变成这样 moduleName-bundle-*.jar这样子;后面的directory也是需要这样写直接写成inclues 目录名/文件名会变成 bundle-target-bundle-*.jar,显然也是不行的。
  4. web module:主要有以下问题:一个是lib打包的问题,除了web自己需要的jar以外,还有bundle的依赖,但不包括bundle本身。一开始想在conf module打包时用assembly copy 到lib,确实也是可以的,但在web单独package时就不对了;后来直接依赖conf(因为conf已经依赖了所有bundle,conf要设成jar,不能是POM,不然web要报错),然后在打包时filter。这里有一个细节:官方所说webappDirectory的默认值是${project.build.directory}/${project.build.finalName},确实没错,但只要设定了warSourceDirectory这个属性(因为我的web工程结构非标准,所以必须设),这个webappDirectory就会和warSourceDirectory是同一个目录,也就是打包目录=web开发目录,带来很多不便,如:打包时copy来的lib要在clean时删除(不然svn提交时很烦),web.xml无法更换(工程有开发用的web.xml,打包用的web.prod.xml,ant很容易处理,但是maven就悲剧鸟)等。设定了webappDirectory了以后war package前就有一个copy动作,很多处理可以简单搞定。还有一点warSourceExcludes和packagingExcludes之间的区别要注意,前者是web开发目录copy到web打包目录时所用(主要用于忽略web.xml吧),后者是web打包目录到war包时所用。
    <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <warSourceDirectory>web</warSourceDirectory>
                        <webXml>web/WEB-INF/web.prod.xml</webXml>
    
                        <!--貌似设了warSourceDirectory以后一定要设这个-->
                        <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
    
                        <warSourceExcludes>
                            WEB-INF/web.xml, WEB-INF/web.prod.xml
                        </warSourceExcludes>
    
                        <packagingExcludes>
                            WEB-INF/lib/*.api-*.jar,WEB-INF/lib/*.impl-*.jar,
                            WEB-INF/lib/core.*.jar,WEB-INF/lib/base.*.jar,
                            WEB-INF/lib/sys.*.jar,WEB-INF/lib/rainbow*.jar,
                            WEB-INF/lib/*servlet*.jar
                        </packagingExcludes>
    
    
                    </configuration>
                </plugin>
    ?

?

?

?

发表评论
用户名: 匿名