Main-Class не может быть установлен на существующий класс - PullRequest
1 голос
/ 06 февраля 2011

У меня есть настройка сборки, которая требует, чтобы мои классы были помещены в папку в подкаталоге моего текущего каталога. То есть, если я нахожусь в '.', То классы могут быть в './somewhere_else/'

Проблема в том, что когда я делаю это, я не могу установить значение для Main-Class, которое может найти основной класс. У меня нет проблем, когда я собираю jar из файлов в '.', Но все следующие попытки для основного класса приводят к java.lang.NoClassDefFoundError's:

Main-Class: ClassName
Main-Class: FolderName.ClassName
Main-Class: FolderName/ClassName

Что я должен использовать?

Ответы [ 3 ]

1 голос
/ 06 февраля 2011

Классы внутри вашего jar должны быть в той же структуре каталогов, что и структура вашего пакета.

  • Итак, если вы хотите, чтобы ваш класс ClassName (без какого-либо пакета) был основным классом, он должен находиться в корневом каталоге вашего jar.
  • Если вы хотите, чтобы класс находился в каталоге FolderName, это же имя должно быть именем пакета, то есть первая (непустая некомментируемая) строка вашего исходного файла должна быть package FolderName;.

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

0 голосов
/ 06 февраля 2011

Если ваш ClassName находится в пакете FolderName, то он должен быть: -

Manifest-Version: 1.0
Main-Class: FolderName.ClassName
Class-Path: <third-party>.jar <another-third-party>.jar

Кстати, они чувствительны к регистру.

0 голосов
/ 06 февраля 2011

Я думаю, что вы должны ссылаться на Main-Class просто по имени класса (без структуры каталогов). Что поможет вам решить эту проблему - это то, что вы указали как путь к классам. Убедитесь, что каталог Main-Class находится в пути к классам.

...