2015-08-26 25 views
0

我有兩臺java SDK - 1.4.2_04和1.8.0_45的windows機器。我在Eclipse Mars中有簡單的Maven Java項目。maven-compiler-plugin如何構建

After maven project creation vizard my pom xml looked like: 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>grr</groupId> 
    <artifactId>arr</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</project> 

當我tryed運行我的應用程序墜毀錯誤:

java.lang.UnsupportedClassVersionError: arr/ff (Unsupported major.minor version 49.0) 

     at java.lang.ClassLoader.defineClass0(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:537) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:251) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:55) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:194) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:187) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:289) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:235) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) 
    Exception in thread "main" 

代碼:

package arr; 

    public class ff { 

     public static void main(String[] args) { 

      System.out.println(System.getProperty("java.version")); 

     } 

    } 

然後,我已經更新了我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>grr</groupId> 
    <artifactId>arr</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <properties> 
     <java.version>1.4.2_04</java.version> 
    </properties> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <verbose>true</verbose> 
        <fork>true</fork> 
        <debug>false</debug> 
        <source>${java.version}</source> 
        <target>${java.version}</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

並得到了項目工作!

maven如何知道在哪裏搜索JDK?我想maven-compiler-plugin以某種方式做到這一點。如果我將java.version更改爲1.4.2_16,它仍然會編譯。爲什麼?我的系統上沒有1.4.2_16。

+0

通過更改''和''參數,您不會更改要使用的JDK,而是更改給JDK(可能是您的1.8.0_45),以便生成Java 4兼容代碼。我猜編譯插件很聰明,可以理解'1.4.2_04'和'1.4.2_16'就是'1.4'。 – Tome

+0

推薦閱讀:http://stackoverflow.com/questions/11364761/how-do-i-compile-a-java-with-support-for-older-versions-of-java – Gimby

+0

下面是一個問題,一個不同的亮點:Maven本身就是一個Java程序。在運行'mvn'shell腳本時,將使用什麼Java運行時來運行Maven? – Gimby

回答

0

如看到here,次版本49是從1.5編譯的代碼。 這是因爲默認情況下,maven編譯器插件中的<source><target>1.5。因此,在使用1.4 JDK運行應用程序時,您會遇到此錯誤。

只要您將<source><target>設置爲1.4,編譯後的代碼就可以與1.4環境兼容。

在你的情況,似乎maven正在使用1.8 JDK,可能配置爲JAVA_HOME,但你正在運行你的應用程序與1.4 JDK。