2010-04-02 9 views
7

Ich habe Projekte, die mit einer bestimmten Version des JDK erstellt werden müssen.Maven-Projektabhängigkeit gegen JDK-Version

Das Problem liegt nicht in den Quell- und Zielparametern, sondern in den Gläsern der Laufzeit, die während der Kompilierung verwendet werden. In einigen Fällen bekomme ich einen Kompilierungsfehler, wenn ich versuche, mit dem falschen JDK zu kompilieren, aber manchmal ist der Build erfolgreich und ich bekomme Laufzeitfehler, wenn ich die JARs benutze.

Zum Beispiel in Eclipse habe ich die Möglichkeit, die Ausführungsumgebung für das Projekt in der Datei .classpath einzurichten.

Gibt es eine Möglichkeit, solche Situation in Maven zu behandeln?

Was ich möchte, ist die Fähigkeit, JRE-Abhängigkeit wie andere Abhängigkeiten des Projekts in der POM-Datei zu behandeln.

UPDATE:

Die akzeptierte Lösung die beste war, als ich diese Frage gestellt, so dass ich es nicht ändern. Inzwischen wurde eine neue Lösung für diese Art von Problemen eingeführt: Maven Toolchain. Folgen Sie dem Link für weitere Details.

Antwort

2

ich diesen Artikel gefunden habe:

http://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html

<project> 
    [...] 
    <build> 
    [...] 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.1</version> 
     <configuration> 
      <verbose>true</verbose> 
      <fork>true</fork> 
      <executable>${JAVA_1_4_HOME}/bin/javac</executable> 
      <compilerVersion>1.3</compilerVersion> 
     </configuration> 
     </plugin> 
    </plugins> 
    [...] 
    </build> 
    [...] 
</project> 
+0

Danke, das löst mein Problem –

1

Ich glaube, dass dies mit folgenden Plugin in Ihrem pom gelöst werden:

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

Hier zielen Sie Version 1.6 oder eine eigene Version

+1

Nein, wie ich sagte, es ist nicht eine Frage der Quell- und Zielparameter, da dieser Einfluss nur, wie der Compiler die Sprache (Quelle) zu lesen und Generiere den Bytecode (Ziel), aber nicht die Bibliotheken, die bei der Kompilierung verwendet werden. Wenn Sie mit einem 1.6 jdk ein Projekt mit 1.5 als Quell-/Zielparameter kompilieren, können Sie immer noch ein jar erhalten, das für die Ausführung mit 1.5 jre nicht gültig ist (z. B. können Probleme mit überladenen Methoden in Bibliotheksklassen auftreten). –

+0

@Andrea dann Pascal Lösung ist die Antwort – ant

+0

ja, ich denke, Profile sind, was Sie brauchen. –

2

Ich habe Projekte schreiben, die bauen werden müssen mit einer bestimmten Version des JDK.

können Sie die Maven Enforcer plugin verwenden, um die Verwendung einer bestimmten Version des JDK zu erzwingen:

<project> 
    [...] 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>enforce-versions</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <requireJavaVersion> 
        <version>1.5</version> 
       </requireJavaVersion> 
       </rules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

Aber ich bin nicht sicher, ob ich wirklich die Frage verstanden. Wenn dies nicht gewünscht ist, könnten Sie möglicherweise Ihre JDK-spezifischen Abhängigkeiten in Profilen deklarieren und einen Aktivierungstrigger basierend auf der JDK-Version verwenden. Beispiel:

Diese Konfiguration löst das Profil aus, wenn die JDK-Version mit "1.5" beginnt.

+0

Danke das Enforcer Plugin ist mir wirklich sehr nützlich, auch wenn es mein Problem nicht vollständig löst. –