• 测试发布(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;

    clip_image002

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

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

    clip_image003

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

    clip_image004

    现在要的是只打包部分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-INFclasses argetclassescomxxxsrpmcontrollers

    需要的是:

    WEB-INFclassescomxxxsrpmcontrollers

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

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

    <fileSet>

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

    <directory>target/classes/</directory>

    <includes>

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

    </includes>

    </fileSet>

    完美!就是这样配置了;

    clip_image005

    完整的配置如下:

    <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挺好用,好强大!

    clip_image006

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

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

    总结:

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

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

  • 相关阅读:
    asp.net下的网页编辑器
    在Visual C#中访问不同数据库
    VS2008 sp1中文版下载地址
    常用封装链接数据库类
    常用封装日志类
    动态构建OrderBy的Lambda表达式
    用户管理抽象类
    存储过程导出数据库数据
    应用程序xml 配置文件抽象基类
    ini文件示例说明
  • 原文地址:https://www.cnblogs.com/yejq/p/4455358.html
Copyright © 2020-2023  润新知