L'obiettivo è scrivere codice java che rilevi la versione JVM basandosi su modifiche di compatibilità, effetti collaterali, bug e / o comportamenti indefiniti che funzionano in un modo in una versione e in un altro modo in un'altra versione. Inoltre, il codice dovrebbe essere almeno un po 'leggibile, senza sacrificare spazi bianchi e nomi di variabili leggibili.
Per garantire tale obiettivo, le regole formali esatte sono:
Il codice deve essere scritto in Java e dovrebbe generare la versione JRE in cui è in esecuzione.
Il codice non deve utilizzare alcuna API JDK o JRE fornita specificamente per rilevare la versione java o che fornisce gratuitamente la versione JDK o JRE.
Il codice non deve usare la riflessione.
Il codice è necessario solo per funzionare in Hotspot Java SE 5, 6 e 7, ma può funzionare in altre JVM.
Il codice non deve utilizzare librerie di terze parti nel percorso di classe.
Il codice non deve avviare altri processi, java o meno.
Il codice non deve utilizzare le variabili di ambiente.
Il codice non deve cercare nel file system alla ricerca di file o cartelle preesistenti.
Il codice deve essere contenuto in un singolo file ed essere chiamato tramite
public static void main(String[] args)opublic static void main(String... args).Il codice non deve utilizzare alcuna API non pubblica presente in JRE.
Il codice non deve generare alcun NoClassDefFoundError, NoSuchMethodError, ClassNotFoundException o NoSuchMethodException durante la sua esecuzione.
Il codice dovrebbe essere eseguito in un sistema disconnesso da Internet o da qualsiasi rete locale.
Dovresti fornire una spiegazione del perché si comporta in un modo in una versione e in un altro in un'altra versione.
punteggio
Il metodo utilizzato per misurare la soluzione migliore è max (n / s), dove n è il numero di diverse versioni java rilevate senza violare nessuna di queste regole (almeno versioni 5, 6 e 7) e s è il numero di token lessicali nella soluzione.
