2016-02-11 42 views
3

我正在使用Maven和kotlin-maven-plugin來編譯代碼。錯誤:當使用Kotlin編譯Java代碼時,源代碼1.3不支持泛型

<plugin> 
    <artifactId>kotlin-maven-plugin</artifactId> 
    <groupId>org.jetbrains.kotlin</groupId> 
    <version>${kotlin.version}</version> 

    <executions> 
     <execution> 
      <id>compile</id> 
      <phase>process-sources</phase> 
      <goals> 
       <goal>compile</goal> 
      </goals> 
      <configuration> 
       <sourceDirs> 
        <source>src/main/kotlin</source> 
        <source>src/main/resources</source> 
        <source>target/generated-sources/jooq-h2</source> 
       </sourceDirs> 
      </configuration> 
     </execution> 

     <execution> 
      <id>test-compile</id> 
      <phase>process-test-sources</phase> 
      <goals> 
       <goal>test-compile</goal> 
      </goals> 
      <configuration> 
       <sourceDirs> 
        <source>src/test/kotlin</source> 
       </sourceDirs> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

target/generated-sources/jooq-h2目錄包含Java源文件。我遵循Kotlin manual和其他people's recommendation,將Kotlin compulation放入<phase>process-sources</phase>而不是<phase>compile</phase>。我(可能是錯誤的?)假設Kotlin編譯器也爲我編譯這些Java文件。

然而,有些服務器(例如詹金斯CI)上,我得到了奇怪的編譯錯誤信息,如:

[ERROR] /var/lib/jenkins/jobs/jooq-build/workspace/jOOQ-examples/jOOQ-kotlin-example/target/generated-sources/jooq-h2/org/jooq/example/db/h2/tables/Author.java:[35,37] 
     error: generics are not supported in -source 1.3 

這是爲什麼?

+0

是什麼這些問題的區別:http://stackoverflow.com/q/6513479/1743880,或http://stackoverflow.com/ q/7597950/1743880或http://stackoverflow.com/q/16662830/1743880? – Tunaki

+1

@Tunaki:沒有Kotlin。具體來說,我(錯誤地)認爲Kotlin編譯器也會爲我編譯Java類。 –

+2

@LukasEder Kotlin只使用Java類爲Kotlin生成存根以進行編譯,然後Kotlin在Java之前編譯,之後由SOMETHEL ELSE編譯Java。 –

回答

5

我注意到在這個特別的Kotlin項目中,沒有指定Java編譯器,特別是Java版本。這導致選擇了一些機器默認值,這是我的本地機器的Java 1.8,但Jenkins CI服務器上的Java 1.3。添加一個明確的參考maven-compiler-plugin解決這個問題對我來說:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.3</version> 
    <configuration> 
     <source>1.8</source> 
     <target>1.8</target> 
    </configuration> 
</plugin>