[/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]
分享到:
相关推荐
Storm 编程实践(安装 Maven-使用 Maven 编译运行代码-mvn 打包) 本文档介绍了 Storm 编程实践的实践报告,涵盖了安装 Maven、使用 Maven 编译运行代码和 mvn 打包等内容。报告中还包括了实验环境的配置、实验内容...
maven编译pentaho-big-data-plugin遇到的所有问题解决,pentaho6.0
eclipse 中编译、运行都正常,但是如果用maven的打包命令 mvn clean package 进行打包时会发现有类型错误
通过上述步骤,你可以实现使用Maven编译Flex项目,从而提高开发效率,简化项目管理。在压缩包的文件列表中,`pom.xml`是项目的核心配置文件,`target`目录是Maven默认的构建输出目录,而`src`则包含了项目的源代码。...
"Jenkins+maven编译发部JAVA项目" Jenkins 是一个开源的自动化服务器,主要用于自动化各种任务,例如构建、测试、部署等。Maven 是一个项目管理工具,主要用于管理项目的依赖关系、编译、打包、部署等。下面将详细...
《Mahout in Action源代码Maven编译JAR包详解》 Apache Mahout是一个流行的机器学习库,广泛用于数据挖掘和大数据分析。《Mahout in Action》这本书是Mahout技术的权威指南,提供了丰富的示例代码供读者实践。然而...
### 使用Maven编译Hadoop 2.7.1 的详细步骤及注意事项 #### 一、编译前的准备 **1.1 下载并解压Hadoop源码包** 根据作者gyqiang的说明,要编译的是Apache Hadoop 2.7.1版本,该版本发布于2016年1月4日,是当时...
使用Maven编译Java项目,只需在命令行中输入`mvn compile`,Maven就会自动找到src/main/java目录下的源代码,进行编译,并将结果放在target/classes目录下。 5. **运行测试** Maven同样支持自动化测试,通过`mvn ...
在这个“reportng源码(maven编译打包)”项目中,我们可以看到ReportNG的源代码,它是使用Maven构建系统进行管理的。Maven是一个广泛使用的Java项目管理和集成工具,它帮助开发者自动化构建、依赖管理和项目信息管理...
使用Maven编译`jredis`源码,可以确保所有依赖项都正确引入,且最终的`jar`文件包含了编译后的类和资源,可以直接在其他Java项目中引用。 5. **Maven配置**:`pom.xml`文件定义了项目的构建过程、依赖关系和插件...
Maven编译bindead资源是Java开发中的一种特定场景,涉及到Maven这个强大的构建工具和一个名为"bindead"的特殊资源。在Java开发环境中,Maven是管理项目依赖、构建和打包的重要工具,它遵循约定优于配置的原则,使得...
本文将深入探讨如何使用Maven来编译并创建一个JAR(Java Archive)包,主要涉及以下几个方面: 1. **Maven简介**: Maven是Apache软件基金会开发的一个项目管理工具,它通过一个统一的方式来管理项目的构建、报告...
Maven的插件系统允许扩展其功能,如编译Java代码(maven-compiler-plugin),打包应用(maven-jar-plugin),创建站点文档(maven-site-plugin)等。开发者可以通过在POM中配置插件来实现特定的构建任务。 **5. ...
Linux环境下使用Maven编译RocketMQ 4.3.0版本是Java开发者在分布式消息队列领域中的常见操作。RocketMQ是由阿里巴巴开源的一款高性能、高可用、稳定且易用的消息中间件,广泛应用于大规模分布式系统中。在这个场景下...
"解决IDEA使用Maven编译正常但是运行项目时却提示很多jar包找不到的问题" IDEA是IntelliJ开发的一款集成开发环境(IDE),Maven是 Apache 软件基金会的一款基于项目对象模型(POM)的项目管理工具。使用IDEA和Maven...
以下是一些优化Maven多模块项目编译速度的策略: 1. **利用多核CPU并行编译**: Maven的 `-T` 参数可以用来指定并发编译的线程数。例如,`-T 4C` 表示使用4个CPU核心进行并行编译,这样能充分利用硬件资源,加快...
jvm虚拟机的jitwatch分析工具,windos可以用maven编译成功
主要介绍了使用maven编译Java项目实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
自己学习并应用Spark一段时间后,由于需要改源代码,就研究了下怎么编译源码,成功编译后,记录下了编译...另外编译使用的工具可以是maven,也可以是sbt,我都研究过了,两种编译方法都予以描述,可根据自身喜好选用。