Нужна помощь в создании файла JAR с помощью Java-команды? - PullRequest
0 голосов
/ 20 апреля 2011

Мне нужно создать jar-файл моего java-приложения.Для этого сначала я создал файл с именем Manifest.MF, в этом файле я сохранил следующий код

Manifest-Version: 1.0
Main-Class: com.demo.test.JavaTest

, а затем я выдал следующую команду в командной строке

jar cvfm JavaAppDemo.jar MANIFEST.MF "C: \ JavaSamples \ MyApp"

где MyApp - это каталог моего проекта, там я создал пакеты и тоже использовал другие файлы jar

и затем я пытаюсь запустить jar, используя команду java

java -jar JavaAppDemo.jar

, и я получил следующее исключение

Exceptionв потоке "main" java.lang.NoClassDefFoundError: com / demo / test / JavaTest

Причина: java.lang.ClassNotFoundException: com.demo.test.JavaSamp на java.net.URLClassLoader $ 1.run (URLClassLoader.java:202) в java.security.AccessController.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (URLClassLoader.java:190) в java.lang.ClassLoader.loadClass (ClassLoader.java:307).misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301) в java.lang.ClassLoader.loadClass (ClassLoader.java:248) Не удалось найти основной класс: com.demo.test.JavaTest.Программа закроется.

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

Ответы [ 3 ]

0 голосов
/ 20 апреля 2011

Хорошо, несколько вещей:

Вот как вы должны запустить свое приложение:

java -classpath myapplication.jar:.. -Dlog4j.info -Dlog4j.configuration=file:../../conf/log4j.xml com.mywebsite.Benchmarks

Возьмите этот log4j, если он вам не нужен. Я уверен, что вы просто пропускаете строку com.mywebsite.Benchmarks, которая сообщает jar, с какого скомпилированного класса начинать. Если у вас есть Benchmarks, FullTest, MainApp, скомпилированные в вашем jar-файле, а основной метод находится в Benchmarks, вам нужно сообщить об этом в jar-файле.

Что касается постройки твоей банки ...

Проще всего использовать какой-нибудь скрипт сборки Ant.

<target name="build">
  <delete file="MyApplication.jar" />
  <delete dir="_classes" />
  <mkdir dir="_classes" />
  <javac srcdir="src" destdir="_classes" debug="true">
    <classpath path="../../3rdParty/log4j/log4j-1.2.16.jar" />
  </javac>
  <jar jarfile="MyApplication.jar" basedir="_classes"/>
</target>

Это должно начать вас. Но вам нужно убедиться в нескольких вещах, когда вы запускаете его:

  1. У вас есть все зависимости в вашем пути к классам.

  2. Вы указываете банке, с какого класса начинать.

0 голосов
/ 20 апреля 2011

Некоторые вещи, о которых я могу подумать:

В сообщении об ошибке говорится, что он не может найти файл com / demo / test / JavaTest.class.Вы можете попробовать просмотреть свой jar-файл с помощью программы zip-файла (файл .jar сжимается так же, как файл .zip), чтобы увидеть, действительно ли этого файла нет.Я подозреваю, что код ошибки на самом деле корректен в том смысле, что его на самом деле нет, но, по крайней мере, вы можете увидеть его (или не увидеть) своими глазами.И помните, что он должен начинаться с папки «com».

Возможно, вы путаете файлы .class и .java.Вы уверены, что ваши файлы .java на самом деле скомпилированы в файлы .class?Это может быть маловероятно, но с таким же успехом можно сказать.

Может быть, вам нужно запустить команду jar с "C:\JavaSamples\MyApp\*" в конце, чтобы выбрать все файлы в правильном каталоге.Возможно, вы говорили команде jar включить папку «MyApp».Вы на самом деле не хотите эту папку;Вы хотите, чтобы все файлы внутри него.

0 голосов
/ 20 апреля 2011

Вам, вероятно, следует использовать этот синтаксис для сборки вашего jar:

jar cvfm myapp.jar myapp.MF -C classes myclasspath
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...