接上篇。
空格的处理
本来想自己写词法分析的,结果自己编译原理基础不牢固写出来老是死循环,所以使用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日志了。