Как я могу получить исполняемый файл программы Java?

Возможный дубликат:
Как преобразовать мою программу java в файл .exe?

Я пытаюсь экспортировать программу, написанную на Java 6, в файл JAR.

В моем проекте содержится одна библиотека Java из Интернета и некоторые исходные файлы Java. Когда я создаю JAR файл, путь к классам должен быть установлен по умолчанию, и конечный пользователь должен иметь возможность запускать проект непосредственно из командной строки или другого источника.

Моя цель - экспортировать все в файл JAR, если это возможно. Кроме того, вывод программы должен быть указан в командной строке.

Как я могу экспортировать мою программу таким образом?

Ответ 1

Для этого вам нужно написать файл META-INF/MANIFEST.MF; файл должен находиться в файле jar, который вы распространяете (т.е. тот, который используется людьми с java -jar). Вот пример недавнего "проекта", который я написал:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 11.3-b02 (Sun Microsystems Inc.)
Main-Class: com.hedgee.simonsays.Main
Class-Path: lib/libthrift.jar

Основными полями для обслуживания являются Main-Class (который определяет класс для поиска вашего метода main) и Class-Path (который указывает внешние файлы jar, которые вы используете).

Ответ 2

Вы можете использовать Jsmooth http://jsmooth.sourceforge.net/, чтобы связать ваш Java-код, чтобы сделать исполняемый файл.

Ответ 3

У меня были хорошие впечатления с двумя разными подходами:

1) Используйте плагин fatjar с eclipse, чтобы создать один файл jar со всеми необходимыми банками (использует пользовательский загрузчик классов). Это создает кликабельный файл jar (если это программа GUI). Если вам нужен консольный вывод для этого Jar, завершите его с помощью jsmooth, как описано Bhushan.

2) Используйте "Export → Runnable Jar" в Eclipse 3.5 Milestone 6 с опцией "библиотеки, зависящие от копирования, в подпапку", чтобы создать обычную исполняемую банку с соответствующим манифестом, ссылающимся на зависимые файлы jar (которые помещаются в вложенная папка). Это работает очень хорошо, если вы хотите, чтобы решение не использовало никаких трюков, но это немного сложно для script.