接上篇。
空格的处理
本来想自己写词法分析的,结果自己编译原理基础不牢固写出来老是死循环,所以使用opencsv。核心代码如下:
CSVReader csvReader = new CSVReader(reader, ' ');
String[] fields = null;
while ((fields = csvReader.readNext()) != null) {
// do stuff with fields
}
csvReader.close();
这里使用空格代替CSV默认的分割符号冒号。
打包
本来以为打包很简单,因为单个模块时mvn dependency:copy-dependencies也能把所有依赖导出来,自己写个简单的shell还是works的。但是现在是多模块,总感觉不方便。后来知道了maven-assembly-plugin,不过这个插件的文档不是step by step的,个人感觉无从入手。不得已google了一些现有配置,大部分都是来自博客的,总算找到了能用的配置。
首先在插件配置中制定装配的XML:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
接下来在src/main/assembly/assembly.xml中写如下配置:
<?version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>bin</id>
<formats>
<format>tar.gz</format>
<format>dir</format>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<binaries>
<outputDirectory>lib</outputDirectory>
<unpack>false</unpack>
</binaries>
</moduleSet>
</moduleSets>
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>src/main/scripts</directory>
<outputDirectory>bin</outputDirectory>
<includes>
<include>*.sh</include>
<include>*.bat</include>
</includes>
</fileSet>
</fileSets>
</assembly>
最终得到一个含有bin和lib目录的分发包/目录,lib中是项目所有模块的依赖以及项目自身模块的包,bin目录下是src/main/scripts复制过来的脚本文件。
日志配置
本来不想处理的,但是某些命令实现的依赖中存在日志代码,不得不考虑配置。因为大部分日志都是通过commons-logging处理的,按照现在Java程序的处理方式,建议通过重定向方式由log4j实现和配置。在pom.xml中加入如下依赖:
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.2</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.5.2</version> <scope>runtime</scope> </dependency>
增加log4j.properties
log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %5p %m%n log4j.logger.org.apache.commons.httpclient=ERROR
以上配置提升httpclient的日志阈值到ERROR,这样就不会看到WARN级别的cookie日志了。