2012-11-08 6 views
4

Я недавно разработал некоторые приложения Java, которые я хочу, чтобы другие запускали их машины. Я провел некоторое исследование и теперь знаю, что для распространения java-кода вам нужно создать файл .jar. Ну, я сделал это, но когда я раздаю этот файл, он запускается на некоторых компьютерах, но на других он возвращает ошибку: «Основной класс не смог найти».Распространение java-приложения

  1. Есть проблемы с версией JRE.
  2. Как пользователь узнает, в какой версии он должен запускать приложение.
  3. Могу ли я упаковать правильную версию jre с моим файлом app/jar. как??
  4. Файлы jar не совместимы с другой версией jre, за исключением тех случаев, когда они скомпилированы.
+0

Как вы создали JAR (какие параметры, и вы включили манифест с Main-Class), и как вы пытаетесь запустить программу? –

+0

Я включил файл manifest.mf в банку, используя команду jar xyz.jar manifest.mf * .class в cmd.Мне нужно, чтобы он работал на любой машине, просто дважды щелкнув по нему. Он запускается на некоторых машинах, которые имеют jre 7, но в других случаях на более низких версиях он дает вышеупомянутую ошибку. – anichhangani

+0

С какой версией JDK вы ее компилируете? –

ответ

2

Option1: Создать файл манифеста с записью, как показано ниже, и включают в банке:

 Main-Class: MainProgram 

option2: Просто укажите свое Main имя класса во время выполнения программы, например, если вы jar имя myprogram.jar и главный класс MainProgram затем запустить программу, как показано ниже:

 java -cp myprogram.jar MainProgram 

Если ваш MainProgram принимает какие-то аргументы, они передают их, а в командной строке, например,

 java -cp myprogram.jar MainProgram argument1 argument2 
+0

Ну, я сделал это, и это случилось, чтобы работать на некоторых машинах, но на некоторых других машинах, чей jre версия не то же самое, что приложение было скомпилировано в нем не работает – anichhangani

+0

@AnirudhChhangani: Когда он не работает, вы уверены, что получите ошибку «Main class not found»? –

+0

Да, абсолютно ... случай, когда я обновляю версию JRE для пользователей до версии, в которой было скомпилировано приложение ... – anichhangani

0

Некоторые из SDK (например, Eclipse) имеют функцию для создания jar-файлов. Если вы работаете один пульт это возможно поможет вам создать стабильные JAR-файлы:

«баночка CFM className.jar MANIFEST.MF className.class»

0
  1. Это не имеет значения, за исключением точки 4.
  2. Вам нужно будет сообщить им минимально необходимую версию.
  3. Вы могли бы, но тогда вам, вероятно, придется создать установщик, который еще сложнее, чем банку.
  4. В общем случае да, если у вашего пользователя есть виртуальная машина, по крайней мере, с той версией, которую вы скомпилировали. Файлы классов, которые вы упаковываете в банку, нацелены на некоторую версию JRE и их формат меняются время от времени. Более высокие версии JRE поддерживают файлы классов более низкой версии.

Сообщение об ошибке указывает, что JRE не может найти ваш основной класс. Из комментариев видно, что вы не указали манифест правильно. Он содержится внутри каталога META-INF внутри банки? Что говорит jar -tf my_jar.jar?

Если вы беспокоитесь о версиях JRE, попробуйте указать более низкую целевую версию в команде javac. Вы делаете это, добавляя -target xx к вашему вызову javac и, возможно, также -source xx. Посмотрите на javac -help для описания флагов.

+0

манифест находится в META-INF, приведенная выше команда дает мне список всех классов внутри файла jar. как я могу скомпилировать программу в более низкой версии .. можно указать команду – anichhangani

+1

Просто добавьте '-target my_version' в вашу команду javac. Вы должны быть уверены, что вы не используете какой-либо API из более новой версии. – jackrabbit

+0

Посмотрите на 'javac -help'. – jackrabbit

Смежные вопросы