Здравствуйте, уважаемые.

Давно меня искушала мысль компилировать Java в native код. Выдалось свободное время для баловства. Долго ходил вокруг да около, не знал с какой стороны подступить. Домашняя страница http://gcc.gnu.org/java/ очень скудна на информацию.
С нее была ссылка на MinGW Уже лучше, оформление красивей, даты обновления более поздние, уже радует глаз.
Рыскал по сайту в поисках дистрибутива, отослали к http://sourceforge.net/projects/mingw/
Там наткнулся на автоматический инсталятор MinGW, здорово!
Мини детектив на этом закончился. Остальное - дело техники. В выборе инструментов добавляем галочку на установку Java Compiler.

GCJ нужна еще 1 библиотека, не поставляемая с MinGW - libiconv архив Binaries и Developer Files, потом просто распаковать в папку с установленным пакетом инструментов MinGW

Теперь у нас есть инструмент для компиляции программ!!!
Дальше идет всё описанное на этой странице
маленький класс

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Test {
public static void main(String args[]) {
HashMap os = new HashMap();
os.put("Platon", "hello man!");
Iterator iterator = os.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry es = (Map.Entry)iterator.next();
System.out.println(es.getKey() + " => " + es.getValue());
}
}
}

И компилируем его

gcj --main=Test Test.java

Вуоля! 3.5 Мб exe файл без упаковки + 1Мб нагрузка libiconv2 Заметьте, стандарт Java 1.4. Конструкция foreach не работает :(

exe файл готов, только к нему нужно еще подогнать libiconv2.dll из архива libiconv-XXX-bin.zip

Попробовал сделать структурку посложнее:

import pack.PackagedClass;

public class Test {
public static void main(String args[]) {
System.out.println("This is a test.");
PackagedClass clazz = new PackagedClass();
System.out.println(clazz.getGreeting("Platon"));
System.out.println(clazz.getGreeting("GNU Compiler"));
}
}


package pack;

public class PackagedClass {
public String getGreeting(String name) {
return "Hello " + name + "!";
}
}

Увы, уже проблемы. Буду разбираться. Плюс нужно не забывать о jar библиотеках, которые уже готовы, как с ними работать и так далее. Был бы благодарен, если кто-нибудь поспособствовал.

Итак проведем некоторый ликбез по GCJ
1. При компиляции с помощью GCJ JVM не нужна (предположительно, потому что часть функционала, которая используется в программе встраивается в исполняемый файл, также туда сливается механизм сборки мусора)
2. GCJ бесплатен и распространяется по GPL. Для коммерческих целей используют Excelsior JET (Standard Edition которого стоит $1200)
3. Исполняемый файл GCJ в общей сложности получается 4.5Mb, Исполняемый файл Excelsior JET SE 5.2Mb