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

时间:2021-02-04 02:48:26

项目改成了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;

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

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

 

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

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

 

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

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

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

完美!就是这样配置了;

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

完整的配置如下:

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

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

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

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

 

总结:

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

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