14

Не удается выполнить jar-файл: "отсутствует основной атрибут манифеста"

25

У меня установлено приложение, и когда я пытаюсь его запустить (это исполняемый JAR-файл), ничего не происходит. Когда я запускаю его из командной строки с помощью команды:

java -jar "app.jar"

Я получаю следующее сообщение:

no main manifest attribute, in "app.jar"

Обычно, если бы я сам создавал программу, я бы добавил атрибут main class в файл манифеста. Но в этом случае, так как файл принадлежит приложению, я не могу этого сделать. Я также пробовал извлечь JAR-файл, чтобы найти главный класс, но классов слишком много, и ни один из них не содержит слово "main" в своем названии. Должен же быть способ это исправить, потому что программа нормально работает на других системах.

5 ответ(ов)

1

Вы можете использовать плагин maven-assembly-plugin, как показано в следующем примере:

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <archive>
      <manifest>
        <addClasspath>true</addClasspath>
        <mainClass>com.package.MainClass</mainClass>
      </manifest>
    </archive>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
</plugin> 

В этом примере все jar-файлы зависимостей, указанные в секции, будут автоматически включены в ваш единый jar. Обратите внимание, что jar-with-dependencies следует указывать именно так, а не заменять его на имена файлов jar, которые вы хотите включить.

0

Попробуйте выполнить следующую команду, чтобы включить JAR:

java -cp yourJarName.jar your.package.your.MainClass

Здесь yourJarName.jar — это имя вашего JAR-файла, а your.package.your.MainClass — это полный путь к вашему главному классу в пакете. Убедитесь, что вы правильно указали имя JAR-файла и путь к классу.

0

Я столкнулся с такой же проблемой, и добавление следующих строк в файл pom.xml решило её. Этот плагин гарантирует, что процесс сборки вашего приложения будет выполняться со всеми необходимыми шагами.

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

Попробуйте добавить этот код в свой pom.xml, и это должно помочь.

0

Для Maven это решило проблему (для меня, в кодовой базе Veetle на GitHub):

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>2.0</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <transformers>
              <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>org.lazydevs.veetle.api.VeetleAPI</mainClass>
              </transformer>
            </transformers>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Этого кода достаточно для того, чтобы настроить плагин maven-shade-plugin, который позволяет упаковать все зависимости в один исполняемый JAR-файл. Обратите внимание на указание основного класса (mainClass), что также необходимо для запуска вашего приложения.

0

Чтобы задать главный класс для вашего JAR-файла в Gradle, вам нужно добавить настройки для jar и manifest. Пример кода может выглядеть следующим образом:

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.package.app.Class'
    }
}

В этом примере 'com.package.app.Class' — это полное имя вашего главного класса. Добавьте этот код в ваш build.gradle, и Gradle будет включать указанную информацию в манифест JAR-файла.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь