maven编译

[/size]最近在搭建集成测试框架,设计是junit4+maven3+svn1.6+hudson3.1.2。
在测试过程中通过分析日志发现用hudson做集成测试的时候,test run一直是0.分析原因是找不到class文件,果然到target目录下查看发现 target/classes和target/test-classes目录下只有配置文件,没有class文件。
接下来就开始找maven编译的问题。
因为整个框架中需要测试的主代码是公司在2005年编写的,当时使用的是GBK编码,近些年写的都是UTF-8编码,所以主代码中编码混乱,所以在使用maven编译之前,就遇到了编码问题。
百度过后将此问题解决!!这就是那个大坑啊!我一直纠结maven 编译的原理,而忽略了我本身添加的那一段错误!
请听我细细分析来:
因为资源文件众多,一个一个通过EditPlus等工具改编码很耗时繁琐,所以想找一个一劳永逸的法子,百度之后还真找到了法子,就是在pom文件bulid中添加下列一段:
    <!-- compiler plugin -->
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.0</version>
    <configuration>
    <source>1.7</source>
    <target>1.7</target>
    <encoding>UTF-8</encoding>
    <compilerId>csharp</compilerId>
    </configuration>
    <dependencies>
    <dependency>
    <groupId>org.codehaus.plexus</groupId>
    <artifactId>plexus-compiler-csharp</artifactId>
    <version>1.6</version>
    </dependency>
    </dependencies>
    </plugin>
这是百度来的,当时也没验证,直接使用了,然后运行的确不再报编码问题,就没意识到在这埋下了一个巨大的坑。

用hudson构建项目的时候,分析日志发现 test run 0 。
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ test ---
[debug] execute contextualize
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ test ---
[INFO] Changes detected - recompiling the module!
[INFO]
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ test ---
[debug] execute contextualize
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 9 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ test ---
[INFO] Changes detected - recompiling the module!
[INFO]
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ test ---
[INFO] Surefire report directory: E:\workspace\test\target\surefire-reports

-------------------------------------------------------
T E S T S
-------------------------------------------------------

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

编译了却没有生成class文件!因为对maven和hudson都不是很熟悉,maven只是使用过,不清楚其工作原理,hudson只局限于网上的分享,所以在解决这个问题的时候,耗费一天,是不是hudson哪里配错了,是不是maven pom文件里哪里写错了。思索来去,还是认定是编译插件这一块出了问题。因为起先的编码问题,我加了一个csharp插件过滤编码,所以判断问题可能出现在这。
因为英文不好,只能理解个大概:
可以不使用本身的编译器,而使用指定的编译器进行编译。不用javac编译,用其他方式编译器。可以理解为跨平台编译。文章链接为:http://maven.apache.org/plugins/maven-compiler-plugin/non-javac-compilers.html。java代码不用java编译器,那肯定是有问题的!

接着验证,重新创建了一个maven web工程,将搭好的测试框架挪过来,pom文件中去掉编译插件,运行通过!验证加上编译插件,验证通过!验证加上csharp,验证失败!test run 0。确定症结所在!

只能一个一个改编码格式了!有些问题是不能偷懒的!这次总结教训:百度来的方法要进行验证!

修改完再编译,遇到两个问题
1,maven编译找不到lib下引入的jar包

在pom文件中加入lib下jar包的依赖引入
    <dependency> 
        <groupId>cn.net.emay.metone.api</groupId> 
        <artifactId>MeToneAPI</artifactId>
        <version>1.0.0</version>
        <scope>system</scope> 
        <systemPath>${project.basedir}/lib/MeToneAPI.jar</systemPath> 
    </dependency>

2,程序包com.sun.image.codec.jpeg不存在
在编译插件中引入rt,jar
    <!-- compiler plugin -->
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
    <source>1.7</source>
    <target>1.7</target>
    <encoding>UTF-8</encoding>
    <compilerArguments>
    <bootclasspath>${java.home}\jre\lib\rt.jar</bootclasspath>
    </compilerArguments>
    </configuration>
    </plugin>

至此,hudson maven自动化测试编译圆满解决!

maven命令:
mvn test 不会清空重新编译,需要先clean,否则不能发现问题
mvn package clean-compile-test-package

下面还有很多的工作需要做。
1,写工具应用文档,包括maven,svn及hudson使用文档。因为先前是使用的svn客户端,原先同事们开发工具使用各异,svn上只包含主代码。现在改成maven工程,需要将工具、环境等等都统一,减少同事们应用中不必要的复杂。所以要写一个操作文档。
2,在linux平台上部署hudson和maven私服。,
3,思考框架的优化,在上次的评审会议中,同事们针对元数据管理这一块提出了新的看法,需要考虑与原先方案比是否更优化,如何更优地采集、处理、管理数据。
4,时间数据的测试管理
5,表结构的变换
........
........
........
一系列问题还有待寻求更好地方案去解决!

路漫漫其修远兮,吾将上下而求索!刚把爹!lol


[/size][/size][/size][/size]

猜你喜欢

转载自yuyajian.iteye.com/blog/2055360
今日推荐