だからみんな、
私は、Antと端末でJavac Crossコンパイルを少しプレイしようとしています。ローカルおよび統合環境で、非常に基本的な問題で同じ問題が発生しています。
私はこれをLinuxターミナルで(そしてWindowsとcmdのcygwinでも)実行します:
javac -target 1.6 -source 1.7 -bootclasspath /usr/Java/jdk1.6.0_27/jre/lib/rt.jar Main.Java
system.out.println以外に何もないMain.Java.
javac -version ==> javac 1.7.0_11
エラーメッセージが表示されます。
javac: source release 1.7 requires target release 1.7
ローカルのWindowsマシンでほぼ同じ構成を使用しており、まったく同じ結果が得られます。
クロスコンパイルとは、上位バージョンのjdkを使用して上位バージョンのjdkと互換性のあるソースコードをコンパイルすることですが、おそらくそれよりも低いターゲットバージョンのrt.jarを渡すことであると理解していました。
ターゲットとソースが同じであれば、うまくいきました。
target=1.7 and source=1.7 workd fine
target=1.6 and source=1.6 worked just fine
しかし、私はクロスコンパイルが欲しいので、私が間違っているのは何ですか?
よろしくお願いいたします。よろしくお願いいたします。
新しいバージョンのソースと低いバージョンのターゲットを使用することはできません。たとえば、Java 5では、ジェネリックス、オートボクシングなどの多くの新機能が言語に追加され、JVM 1.4がそれを理解することは期待できません。したがって、コンパイラに指示する必要があります。あなたのソースコードがJava 1.4ソースコードであること。これはあなたが持っている結果を説明しています。
-targetのデフォルトは、-sourceの値によって異なります。
詳細については、 http://docs.Oracle.com/javase/7/docs/technotes/tools/windows/javac.html を参照してください。
これはjavacの制限です。古いバージョンのjavacでは「-target」(-sourceではなく)を指定するだけで解決できることに注意してください。あなたはまだできるかもしれません。
スタンドアロンコンパイラとして、Mavenプラグインとして利用でき、antスクリプトのjavacタスクでも使用できるEclipse Javaコンパイラ(ecj)の使用を検討することをお勧めします。
詳細については、 http://help.Eclipse.org/Indigo/topic/org.Eclipse.jdt.doc.user/tasks/task-using_batch_compiler.htm を参照してください。