测试发布(maven-assembly-plugin看好你哦)

项目改成了maven管理,现场需要用增量补丁包的形式发布代码;

2015/4/21

以前试过用ant打补丁包,现在试试maven能不能做同样的事情;

maven-assembly-plugin看着可以做这样的事情;http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package/

pom.xml配置:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2.1</version>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

assembly.xml:

<assembly>
    <id>bin</id>
    <formats>
        <format>zip</format>
    </formats>
    <dependencySets>
        <dependencySet>
            <useProjectArtifact>true</useProjectArtifact>
            <outputDirectory>lib</outputDirectory>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>README.txt</include>
            </includes>
        </fileSet>
        <!-- <fileSet>
            <directory>src/main/scripts</directory>
            <outputDirectory>/bin</outputDirectory>
            <includes>
                <include>run.sh</include>
                <include>run.bat</include>
            </includes>
        </fileSet> -->
    </fileSets>
</assembly>

运行maven clean package;

第一次运行要下载很多包;

看看srpm-bin.zip都有什么;

lib里边是所有依赖jar和war包;

现在要的是只打包部分class和配置,不需要打包依赖和不生成war包;

看看怎么配置:http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

/controllers/HomeController*.class

配置加了通配符*,没生效;

[INFO] Reading assembly descriptor: src/main/assembly/assembly.xml

[WARNING] The following patterns were never triggered in this artifact inclusion filter:

哈哈,这里只是用fileSet就可以了;

增加一个试试:

<fileSet>

<outputDirectory>/WEB-INF/classes</outputDirectory>

<includes>

<include>target/classes/com/xxx/srpm/controllers/HomeController.class</include>

</includes>

</fileSet>

打包结果路径是:

WEB-INF\classes\target\classes\com\xxx\srpm\controllers

需要的是:

WEB-INF\classes\com\xxx\srpm\controllers

因为这样和war包的目录结构一样,升级的时候直接拖动文件夹覆盖war包里边的就可以了;

看文档貌似directory能设置基准路径;

<fileSet>

<outputDirectory>/WEB-INF/classes</outputDirectory>

<directory>target/classes/</directory>

<includes>

<include>com/xxx/srpm/controllers/HomeController.class</include>

</includes>

</fileSet>

完美!就是这样配置了;

完整的配置如下:

<assembly>
    <id>upd-20150421-1</id>
    <includeBaseDirectory>false</includeBaseDirectory>
    <formats>
        <format>zip</format>
    </formats>
    <fileSets>
        <fileSet>
            <outputDirectory>/WEB-INF/classes</outputDirectory>
            <directory>target/classes/</directory>
            <includes>
                <include>com/xxx/srpm/controllers/HomeController.class</include>
                <include>com/xxx/srpm/activiti/DetailBuilder.class</include>
                <include>com/xxx/srpm/activiti/common/HistoricProcessInstanceSQLFragment.class</include>
                <include>com/xxx/srpm/activiti/query/HistoricProcessInstanceQuery.class</include>
                <include>com/xxx/srpm/base/dao/BaseDao.class</include>
                <include>com/xxx/srpm/base/dao/SQL.class</include>
                <include>com/xxx/srpm/base/query/BaseQuery.class</include>
                <include>com/xxx/srpm/base/util/BaseUtils.class</include>
                <include>com/xxx/srpm/base/util/PageUtils.class</include>
                <include>com/xxx/srpm/repository/activiti/HistoricProcessInstanceRepository.class</include>
            </includes>
        </fileSet>
        <fileSet>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>README.txt</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

再写个Helper:

/**
 * assembly.xml配置工具类
 * @author yejq
 */
public class AssemblyHelper {

    private final static String CLASS_PATH;

    static {
        File file = new File("");
        CLASS_PATH = file.getAbsolutePath();
    }

    /**
     * 将java的路径转换为class路径
     */
    @Test
    public void java2class(){
        String path = CLASS_PATH + "/src/test/java/build/java.txt";
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(path));
            String line = null;
            StringBuilder builder = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                if (StringUtils.isNotBlank(line)) {
                    line = line.trim().replace("/srpm/src/main/java/", "                <include>")
                            .replace(".java", ".class</include>");
                    builder.append(line).append(BaseUtils.lineSeparator);
                }
            }
            System.out.println(builder.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

maven-assembly-plugin挺好用,好强大!

再加上个通配符,避免遗漏内部类;

<include>com/xxx/srpm/controllers/HomeController*.class</include>

总结:

1、解决方案很多,用哪个,究竟哪个更适合更优雅,用过才知道,或许不是最佳实践,但没试过,怎么知道是不是最佳呢?这就是架构做的事情:在解决方案之间做决策,并提供最佳实践,指导开发人员实践;

2、工作了一周,问同事有没有签合同,了解到可能是转正签,之前遇到的都是入职签,这转正签会不会有问题?

时间: 2024-10-10 13:47:35

测试发布(maven-assembly-plugin看好你哦)的相关文章

question --&gt; maven assembly plugin 修改文件默认权限

使用maven assembly plugin插件添加执行脚本时,发现默认权限为644,还需要手动添加执行权限.这很麻烦,于是查看文档 官方文档 http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_fileSet fileMode String Similar to a UNIX permission, sets the file mode of the files included. THIS IS

maven assembly plugin使用

使用场景 在使用maven来管理项目时,项目除了web项目,还有可能为控制台程序,一般用于开发一些后台服务的程序.最近在工作中也遇到了这种场景,使用quartz开发一个任务调度程序.程序中依赖很多jar包,项目的启动时只需要初始化spring容器即可. 使用方法 使用一个简单的基于spring框架的demo来做程序示例,来介绍maven assembly插件的使用方法. 项目中的代码目录如下: 在以上代码目录中,assembly目录下为打包的描述文件,下面会详细介绍该文件,bin目录下为启动脚本

Maven Assembly插件介

你是否想要创建一个包含脚本.配置文件以及所有运行时所依赖的元素(jar)Assembly插件能帮你构建一个完整的发布包. Assembly插件会生成 "assemblies", 此特性等同于的Maven 1 distribution plug-in..该插件不仅支持创建二进制归档文件,也支持创建源码归档文件.这些assemblies定义在一个assembly描述符文件里.你可以选择自定义assembly描述符或者直接使用插件自带的三个预定义描述符中的任何一个. 目前Assembly插件

Jenkins(七)---jenkins项目编译测试发布由maven构建的web项目

/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *未经作者同意,禁止转载 */ 一.使用maven编译 (maven编译  与 测试 test 和打包 package 和 部署 install 类似,不再赘述 ) 在项目的配置页面中有个maven配置:里面只有一个clean   就是清除以前的构建信息: 之前我使用了clean   package来编译打包:结果如下图: ---------------------------------------------------

配置Elipse发布Maven项目到Tomcat

配置Elipse发布Maven项目到Tomcat——转载: maven项目创建成功后,本来已经添加了jar的依赖,但是发布到Tomcat中就是没有jar包存在, 启动Tomcat总是报没有找到jar包,可项目结构中确实已经有jar了,一直很郁闷,所以记录下来. 1.首先确定好我们已经安装好maven需要的环境,并且已经创建好一个Maven依赖的Web项目,可以查看前几篇maven的学习内容搭建maven项目     一个完整的maven依赖的web项目 大家看,我这里只依赖了oracle的驱动包

Git+Jenkins学习之路(八)之发布maven项目及按版本发布

一.什么是Maven maven是一个项目管理和综合工具.Maven提供给开发人员构建一个完整的生命周期框架. 开发团队可以自动完成该项目的基础设施建设,Maven使用标准的目录结构和默认构建生命周期 maven是属于Apache的开源项目 maven主要服务于java平台的构建.依赖管理.项目管理. 二.手动安装MAVEN (1)下载maven [[email protected]-node2 ~]# wget http://mirrors.hust.edu.cn/apache/maven/m

Tomcat发布Maven项目遇到的种种异常(转:http://blog.csdn.net/zhang6622056/article/details/9772951)

前言: 本问题出现在tomcat 7发布 web3.0Maven项目的时候出现. 1.RUN参数的配置 2.关于WEB.XML不发布的解决方案 3.MAVEN依赖的JAR包不发布的解决方案 4.经历说明 问题阐述: 异常:java.lang.OutOfMemoryError:PermGen space 解决如下: 1. 在MAVEN_HOME/bin/mvn.bat文件加入一句话: 搜索@REM set MAVEN_OPTS= 在它下面加入一句话:set MAVEN_OPTS= -Xms128m

maven jetty plugin

前言: 在 maven 下测试调试时,相比较 Tomcat .Jboss .Jetty 而言,个人更倾向于使用 Jetty Plugin. 怎么说呢?使用 Jetty Plugin 的时候最爽的是不用你敲打包.部署,然后再启动服务器的指令,只需敲一句:mvn jetty:run 或直接点 eclipse 上的 run 按钮就完事了.而且更爽的是,你修改资源文件,Jetty 能自动扫描到并及时给予反馈进行重加载, 这对修改java文件很有帮助,不用每次修改java文件都要重启服务器,省掉了不少没必

学习 Maven之Maven Enforcer plugin

1.Maven Enforcer plugin是什么鬼? 在说这个插件是什么前我们先思考这么一个问题:当我们开发人员进入项目组进行开发前,要准备开发环境,而领导总是会强调工具的统一,编译环境的统一.比如要求所有开发人员使用JDK1.8进行开发. 开发人员接下来就是去下载指定版本的JDK,然后开始开发.但是如果开发人员的机器配置比较多,有好几个版本的JDK,而他虽然下载了JDK1.8,但是忘记配置环境变量,很有可能他用了JDK1.6进行的编译. 问题有了,该如何解决? Maven Enforcer

如何发布Maven依赖到中央仓库

平时我们都是从Maven中央仓库下载依赖,如果我们想发布我们自己写的Maven依赖到中央仓库供别人下载使用应该怎么办?这里以上传自己写的simian-maven-plugin(https://github.com/jiangxincode/simian-maven-plugin)的实际过程为例说明如何发布Maven依赖到中央仓库. 开始之前,请注意几个地址:? 1.工单管理:https://issues.sonatype.org/secure/Dashboard.jspa 说明:注册账号.创建和