[英]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.