java runnable jar от netbeans 6.9.1 - PullRequest
       27

java runnable jar от netbeans 6.9.1

4 голосов
/ 22 сентября 2010

У меня есть проект в NetBeans6.9.1.Он отлично работает изнутри IDE.Но когда я пытаюсь запустить jar, который NetBeans автоматически создал в каталоге dist, я получаю NoClassDefFoundError для классов внутри моего проекта.Что я делаю неправильно?Должен ли я использовать Ant или что-то еще (не знаю Ant) В Eclipse я делаю «создать работоспособную флягу», и фляга работает без проблем.Есть ли что-то эквивалентное в NetBeans?

ОБНОВЛЕНИЕ : В dist / myJar я извлек jar, а в манифесте отсутствовали текущий путь и корневой путь моего проекта.Я добавил их вручную и заново создал банку из командной строки.И это работает.Но почему NetBeans не добавляет их в путь к классу манифеста фляги. Я не понимаю

ОБНОВЛЕНИЕ 2 Я обнаружил проблему.Я думаю, что это серьезная ошибка NetBeans.Я произвел рефакторинг и изменил имена пакетов с myPackage.model на mypackage.model .Но NetBeans не сделал это правильно.Это действительно изменило имя пакета на mypackage, как видно в древовидном навигаторе, но имя пакета внутри файла осталось как myPackage .Программа выполнялась нормально в среде IDE, и об ошибках не сообщалось (хотя все классы объявлялись принадлежащими моему P ackage и в дереве они находились под моим p ackage), нокогда я попытался запустить jar внутри директории dist, я получил исключение для класса not found.Сегодня я заметил, что класс был указан как мой P ackage / model вместо моего p ackage / model.Я посмотрел на классы, и рефакторинг полностью запутал все.Я вручную изменил имя пакета из моих классов с myPackage на mypackage и исправил все операции импорта (которые импортировали myPackage).Это известная проблема NetBeans ????

Спасибо

Ответы [ 4 ]

6 голосов
/ 22 сентября 2010

В NetBeans ваш Java-проект будет основан на Maven или Ant. То, что вы хотите сделать, это создать «толстый» флягу, которая включает все его зависимости. Для Maven вы можете добавить следующие строки в ваш pom, чтобы разместить это:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>package.and.MainClass</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Так что для Maven это двухэтапная вещь:

  • Вы должны указать Maven создать "затененный" (включая зависимости) jar,
  • и вы должны указать основной класс (тот, который содержит метод static main(..) для запуска.

Если вы используете Ant, возможно, вы захотите посмотреть это сообщение в блоге .

1 голос
/ 23 января 2013

Я решил после этого поста во внешнем блоге :

Вы должны добавить два плагина (maven-assembly-plugin и maven-jar-plugin) в раздел build вашего pom.xml файл.Вы строите раздел будет похож на это:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>(select version, i.e: 2.3)</version>
                  <executions>
                    <execution>
                       <goals>
                         <goal>attached</goal>
                       </goals>
                       <phase>package</phase>
                       <configuration>
                         <descriptorRefs>
                           <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <archive>
                          <manifest>
                            <mainClass>your.main.Class</mainClass>
                          </manifest>
                        </archive>
                      </configuration>
                   </execution>
                </executions>
              </plugin>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>(select version, i.e: 2.3.2)</version>
                  <configuration>
                    <archive>
                      <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>your.main.Class</mainClass>
                      </manifest>
                   </archive>
                 </configuration>
              </plugin>                        
        </plugins>
    </build>
1 голос
/ 22 сентября 2010

У меня была такая же проблема, и все, что я могу сказать, это то, что с NetBeans 6.9.1, похоже, это сбой, так как он работал в 6.8 и 6.9.

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

0 голосов
/ 23 сентября 2010

NetBeans создает самодостаточный файл JAR для вашего проекта при выполнении команды «Очистить и построить» из меню или кнопки инструмента.

В идеале путь к классу файла Jar не должен содержать корневую папку проекта, NetBeans добавляет библиотеку JARS, если вы добавили их в проект в свойстве Class-Path в файле manifest.mf автоматически.

Если у вас есть какие-либо особые требования, вы даже можете изменить файл manifest.mf, который будет включен в состав встроенного JAR-файла. Файл manifest.mf доступен на панели «Файлы» в корневом каталоге проекта.

Чтобы сделать JAR исполняемым с помощью команды java -jar, вы должны указать класс Main в конфигурации проекта. (Если проект был создан с помощью мастера проектов NetBeans, этот класс уже определен, в противном случае мы должны сделать это вручную)

Укажите основной класс через опцию меню следующим образом:

File > Project Properties > Run (Category) > Main Class (textbox)

Пожалуйста, дайте подробную информацию о вашем проекте, как

  1. Создан ли проект из мастера создания новых проектов NetBeans?
  2. Является ли проект Ant или Maven?
  3. Создан ли проект в свободной форме из существующего источника?

Эта дополнительная информация поможет мне ответить на вопрос в конкретных деталях. Надеюсь, это помогло.

относительно
Tushar

...