Mam ten sam wymóg i rozwiązać go w następujący sposób:
posiadają klasę „Uruchomienie”, że nie ma żadnej zależności (= importu) do każdej nowej klasy JDK lub na którykolwiek z klas swojej aplikacji. Ty człowiek nie zaimportuj swoją główną klasę po imieniu!
Coś jak:
Wewnątrz tej klasy rozrusznika, należy sprawdzić wersję Java, które potrzebujesz.
Jeśli kontrola się powiedzie, załaduj swoją główną klasę za pomocą refleksji i rozpocznij jej główną metodę (lub dowolną metodę, której używasz). Coś takiego:
public class MyStarter
{
public static void main(String[] args)
{
String version = System.getProperty("java.version", null);
boolean isVersionOK = ... ;
if (!isVersionOK)
{
System.err.println("Wrong Java version detected");
// or display some messagebox using JOptionPane
System.exit(1);
}
Class mainClass = Class.forName("com.foo.MyMain");
Method main = mgr.getDeclaredMethod("main", new Class[] { String[].class });
main.invoke(null, new Object[] { args });
}
}
Znowu: upewnić MyStarter nie zawiera żadnychimportu do aplikacji lub klas, które nie są dostępne w języku Java 1.2 (lub cokolwiek Java wersja będzie kierować).
Następnie skompilować MyStarter
(i tylko że klasa) z -source 1.2 -target 1.2
Kompilacja resztę swoich klasach z regularną kompilator (np tworzenia plików Java7 .class).
Jeśli wygenerujesz plik wykonywalny, a następnie dodaj com.foo.MyStarter
jako atrybut Main-Class:
.
My z "kompilacji" target w moim Ant build.xml
wygląda mniej więcej tak:
<-- compile the starter class for Java 1.2 -->
<javac destdir="${build}"
srcdir="${src}"
target="1.2"
source="1.2"
encoding="ISO-8859-1"
includeantruntime="false"
includes="com/foo/MyStarter.java"/>
<-- compile the rest with for Java 1.6 -->
<javac destdir="${build}"
srcdir="${src}"
target="1.6"
source="1.6"
includeantruntime="false"
encoding="ISO-8859-1">
<exclude name="com/foo/MyStarter.java"/>
<classpath>
....
</classpath>
</javac>
następnie umieścić wszystko w jednym pliku jar.
Jak już zaobserwować można uruchomić to tylko 1,7 lub wyższym. Możesz uruchomić słoik skompilowany dla wersji 1.6 z 1.7, ale nie na odwrót. Stąd twój czek jest zbędny. – Ingo
Aby uzyskać więcej informacji na temat 1.7 i kompatybilności sprawdź http://www.oracle.com/technetwork/java/javase/compatibility-417013.html –