[英]Why does Travis CI think my code is Java 1.3, and how to fix it?
我正在使用Java项目(相当标准的Maven,Spring安装程序)试用Travis CI。
根据Travis文档,该文件在.travis.yml
文件中就足够了:
language: java
Travis应该注意项目的pom.xml
并默认运行mvn test
。
但是,Travis构建失败,给了我:
error: static import declarations are not supported in -source 1.3
我的资料来源是Java 1.6。 我该如何和在哪里告诉特拉维斯? Java项目文档根本没有提到-source
选项。 (同样,1.3是一个有点奇怪的默认值,不是吗?)
通过自定义.travis.yml
install
和script
来使其正常工作,如下所示:
language: java
install: mvn install -Dmaven.compiler.target=1.6 -Dmaven.compiler.source=1.6 -DskipTests=true
script: mvn test -Dmaven.compiler.target=1.6 -Dmaven.compiler.source=1.6
无论如何,我不知道Java 1.3默认值的确切来源,但是恕我直言,应该对此进行修复。 Travis 文档谈到“合理的默认值” ,但在这种情况下似乎并非如此。
另一个选择是添加一段冗长的Maven XML,以明确指定源和目标级别。 好吧,我个人反对这样做的想法,只是因为CI环境具有愚蠢的默认值。 (使用Maven并不是要避免使用合理的约定来显式地指定内容吗?)使用我当前的pom.xml
在本地以及在Heroku上部署时,一切都可以正常运行(例如mvn test
)。
只是想补充一点,从2015年开始,使用Java 8代码库,您不再需要在Maven或Travis配置中进行此类自定义。 您摆脱了以下情况:
在pom.xml
顶级<project>
:
<properties>
<java.version>1.8</java.version>
</properties>
在.travis.yml
:
language: java
jdk: oraclejdk8
很好 请注意,即使pom.xml将Java版本设置为1.8,也必须指定JDK 8。 Travis否则默认为JDK 7。
这是因为您没有在pom.xml的maven-compiler-plugin配置中显式设置源和目标级别。
然后,较早版本的Maven使用javac缺省值,即OpenJDK中的Java 1.3 (与Oracle Java中的1.5相对)。
当然,此问题与Maven3 Ubuntu软件包中的Bug有关,该软件包当前安装在Travis工作者计算机上。
好消息:在下一个Travis CI构建环境中, 将在Apache tarball版本中安装Maven 3.1.1 。 计划于2013年11月部署此更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.