2010-04-10 2 views
1

Я новичок в Java (и Eclipse), но я использовал .NET (и Visual Studio) справедливую сумму. Я также знаю о компиляции кода C/C++ и тому подобных вещей. Я знаю, что в конце я получаю либо EXE, либо хороший двоичный файл, который можно запустить из командной строки.Развертывание приложения Java. Как?

Я делаю утилиту Java, которая использует некоторые внешние библиотеки. Мне нужно скомпилировать это в исполняемый файл, который я могу запустить из командной строки на машине unix, но я не могу найти способ сделать это.

Я могу создавать и запускать/отлаживать в Eclipse, но это бесполезно для меня, поскольку этот код будет запущен на веб-сервере. Мне просто нужны все зависимости, скомпилированные в один файл, но после нескольких часов поиска в Google, самое лучшее, что я мог найти, это плагин Fat-JAR для Eclipse, и после его использования я просто получаю следующую ошибку при попытке запустить файл :

Exception in thread "main" java.lang.NoClassDefFoundError: Network/jar 

Это действительно заблуждение меня, и, как это такая необходимая вещь, чтобы быть в состоянии сделать я уверен, что я должен быть что-то стало очевидным отсутствует, но, как я сказал, после нескольких часов не поиска я получил нигде ,

Я очень ценю любую помощь, которую вы можете мне дать. Благодарю.

+1

Ваша проблема выше - проблема класса.В большинстве случаев при изучении Java вы натыкаетесь на classpaths. Позвольте стандартным отраслевым инструментам управлять этим для вас. Смотрите мое сообщение ниже о Maven. Это действительно хорошо, когда вы следуете конвенции. Действительно разочаровывает, когда вы этого не делаете. В вашем случае это должно облегчить жизнь. – gMale

ответ

0

Если вы создаете приложение java с помощью Maven (что может быть сделано с каждой основной IDE), вы можете использовать maven Shade Plugin для создания затененного файла jar; это файл jar со всеми включенными зависимостями.

Заштрихованный банк можно запустить из командной строки следующим образом:

java -jar myjar.jar command line options 
+0

Спасибо. Я построил банку с Fat-JAR, так что в ней были зависимости. Я предполагаю, что опция -jar сообщает java, что это так. Это прекрасно работает. Спасибо! – danpalmer

+0

Это просто показывает, как мало я знаю о Java. Язык кажется легким, но его настройка - сложный бит. – danpalmer

0

Вы делаете что-то стандартное, и вы используете затмение. Это означает, что в вашем случае Maven - ваш друг. Загрузите и установите M2Eclipse plug-in. Maven лучше всего управляет зависимостями. Таким образом, создание фляги с включенными зависимостями будет очень, очень прямолинейным. Есть тысячи примеров в Интернете и в StackOverflow. Если у вас возникли проблемы с настройкой, прокомментируйте это, и я могу указать вам в правильном направлении.

0

Похоже, что путь вашего класса на сервере необходимо изменить, чтобы получить файл jar, содержащий класс Network. Как вы выполняете свою программу? Какой путь (ы) вы вставляете в параметр -cp?

Если вы не знаете, как узнать содержимое внутри файла jar, запустите jar tf, это будет список упакованных классов. Подтвердите, что в одной из баннеров вашего CLASSPATH есть класс, который, по его словам, отсутствует.

Дайте нам более подробную информацию, и мы сможем решить ее.

+0

Я не думал, что мне нужно установить путь к классам, поскольку все зависимости были собраны в банку. – danpalmer

+0

в порядке, если у вас их статически связаны, тогда вам не придется настраивать classpath. Я не был уверен, как вы выполняете команду для выполнения вашей программы. Похоже, что у вас отсутствует опция -jar. – CoolBeans

0

Я думаю, что я должен сначала объяснить некоторые основы. Класс Java можно запускать как приложение, если оно имеет метод public static void main(String[] args). Если у него есть этот метод, вы можете запустить его из командной строки, как:

java my.package.MyClass <attributes> 

Перед запуском вашего приложения, вам необходимо убедиться, что все необходимые файлы .jar (и корень ваших собственных папок класса, если вы не делали банку из ваших классов) находятся в переменной окружения CLASSPATH.

Это абсолютная основа. Когда вы создаете более сложное приложение или приложение для распространения, вы, вероятно, будете использовать maven или ant или какой-нибудь другой инструмент, который упростит вашу жизнь.

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