E se você criasse em C um executável que usando JNI, criasse a JVM e ligasse ela a sua classe? No manual de JNI da sun há um capítulo explicando como fazer isso. Por sinal, o java.exe é apenas um programa que faz exatamente isso.
Apesar que é mais fácil a solução do thingol mesmo. Mas ela não funcionará se o eclipse (ou o ANT) chamar sempre o java.exe, então a solução poderia ser "corrigir" essa solução, substituindo o java.exe por um outro programa em C mais ou menos assim (não testei, mas é algo assim):
#include<stdio.h>
int main (int argc, char ** argv) {
int i, j, k;
/* Conta o argv[1] duas vezes! */
/* +5 é porque são contados o ".exe" e o terminador nulo. */
int tamanho = strlen(argv[1]) + 5;
for (i = 1; i < argc; i++) {
tamanho += strlen(argv[i]) + 1;
}
char* str = (char *) malloc(tamanho * sizeof(char));
for (i = 0; i < strlen(argv[1]) && argv[1][i] != '.'; i++) {
str[i] = argv[1][i];
}
str[i++] = '.';
str[i++] = 'e';
str[i++] = 'x';
str[i++] = 'e';
str[i++] = ' ';
for (j = 1; j < argc; j++) {
for (k = 0; k < strlen(argv[j]); k++) {
str[i++] = argv[j][k];
}
str[i++] = ' ';
}
str[i] = '[code]
#include<stdio.h>
int main (int argc, char ** argv) {
int i, j, k;
/* Conta o argv[1] duas vezes! */
/* +5 é porque são contados o ".exe" e o terminador nulo. */
int tamanho = strlen(argv[1]) + 5;
for (i = 1; i < argc; i++) {
tamanho += strlen(argv[i]) + 1;
}
char* str = (char *) malloc(tamanho * sizeof(char));
for (i = 0; i < strlen(argv[1]) && argv[1][i] != '.'; i++) {
str[i] = argv[1][i];
}
str[i++] = '.';
str[i++] = 'e';
str[i++] = 'x';
str[i++] = 'e';
str[i++] = ' ';
for (j = 1; j < argc; j++) {
for (k = 0; k < strlen(argv[j]); k++) {
str[i++] = argv[j][k];
}
str[i++] = ' ';
}
str[i] = '\0';
system(str);
free(str);
}
';
system(str);
free(str);
}
[/code]
Basicamente essa gambiarra é para que quando seja chamado "java.exe SuaClasse param1 param2", ele chame ao invés disso "SuaClasse.exe SuaClasse param1 param2". :lol:
POG!