Intellij Apache Ignite Project не создает рабочий файл JAR

Мой проект Intellij безупречно работает внутри IDE, но любые методы, которые пытались извлечь из него действительный файл .jar, приводили к какой-то ошибке. В моем проекте используются Maven, Spring и Apache Ignite. Вот мой файл pom.xml:

<?xml version = "1.0" encoding = "UTF-8"?>
<project
    xmlns = "http://maven.apache.org/POM/4.0.0"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.1.RELEASE</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.apache.ignite</groupId>
    <artifactId>ignite-gettings-started</artifactId>
    <version>1.0.0</version>

    <dependencies>
        <dependency>
            <groupId>javax.cache</groupId>
            <artifactId>cache-api</artifactId>
            <version>1.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-core</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-spring</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.ignite</groupId>
            <artifactId>ignite-indexing</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
        </dependency>



    </dependencies>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

</project>

Манифест:

Manifest-Version: 1.0
Main-Class: server.ServerNodeExample

И структура папок:

- project
  - .idea
  - out
  - src
    - main
      - java
        - examples
          - ...
        - server
          - ...
      - resources
        - META-INF
          - MANIFEST.MF
    - test
  - target
  - pom.xml

Перечислю попытки ниже:

1 - Запуск mvn clean install в каталоге pom.xml: скомпилировано нормально, но я получаю сообщение об ошибке no main manifest attribute относительно моего файла jar.

2 - Я открыл файл jar, и манифест там был совсем другим:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: evandro.teixeira
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_191

Итак, я добавил к нему эту строку:

Main-Class: server.ServerNodeExample

И теперь я застрял в этом странном исключении:

  :$ java -jar ignite-gettings-started-1.0.0.jar 
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/ignite/IgniteException
  at java.lang.Class.getDeclaredMethods0(Native Method)
  at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
  at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
  at java.lang.Class.getMethod0(Class.java:3018)
  at java.lang.Class.getMethod(Class.java:1784)
  at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.apache.ignite.IgniteException
  at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 7 more

Любые идеи?

Две вещи: вы можете настроить основной класс в pom.xml, а во-вторых, при запуске jar вам все равно нужно включить все зависимости в путь к классам.

Ivan 04.12.2018 16:35

Это тоже сработало, но я решил, что толстая банка является более простым подходом.

Evandro Teixeira 04.12.2018 17:24
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
246
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Вы также можете попробовать использовать Spring Boot, который сделает за вас жирную банку.

И я не рекомендую использовать Apache Ignite 2.1, поскольку он очень старый, а Apache Ignite 2.7 уже должен быть выпущен, когда вы выясняете, как запустить свой проект.

spring-boot-maven-plugin работал как шарм и значительно упростил мой pom.xml. Спасибо!

Evandro Teixeira 04.12.2018 17:18

Обратите внимание, что с Apache Ignite Spring Boot может вызвать проблемы, если вы не привяжете версию h2 к той точной версии, от которой зависит Apache Ignite. Вас предупредили!

alamar 04.12.2018 17:37

Другие вопросы по теме