Не удалось создать компонент Ignite при запуске Apache Ignite в командной строке

Когда я начал изучать зажигание, я в итоге использовал IntelliJ в качестве IDE, и он работал нормально. Однако мне нужно переместить его в суперкомпьютерную среду и иметь возможность запускать его из командной строки, но у меня проблемы с тем, что мой код не может найти необходимые классы. Я создал свой проект, используя maven, добавил правильные зависимости, как указано в руководстве по началу работы. После этого я упаковал проект maven и использовал следующую команду:

/usr/java/jdk1.8.0_91/bin/java -cp "${IGNITE_HOME}/modules/core/target/ignite-core-1.6.0.jar:${IGNITE_HOME}/modules/core/target/libs/cache-api-1.0.0.jar:${IGNITE_HOME}/modules/spring/target/ignite-spring-1.6.0.jar:target/my-app-1.0-SNAPSHOT.jar" com.mycompany.app.App

Однако не удается создать компонент зажигания со следующей ошибкой:

Exception in thread "main" class org.apache.ignite.IgniteException: Failed to create Ignite component (consider adding ignite-spring module to classpath) [component=SPRING, cls=org.apache.ignite.internal.util.spring.IgniteSpringHelperImpl]
    at org.apache.ignite.internal.util.IgniteUtils.convertException(IgniteUtils.java:906)
    at org.apache.ignite.Ignition.start(Ignition.java:350)
    at com.mycompany.app.App.main(App.java:24)
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to create Ignite component (consider adding ignite-spring module to classpath) [component=SPRING, cls=org.apache.ignite.internal.util.spring.IgniteSpringHelperImpl]
    at org.apache.ignite.internal.IgniteComponentType.componentException(IgniteComponentType.java:313)
    at org.apache.ignite.internal.IgniteComponentType.create0(IgniteComponentType.java:289)
    at org.apache.ignite.internal.IgniteComponentType.create(IgniteComponentType.java:200)
    at org.apache.ignite.internal.IgnitionEx.loadConfigurations(IgnitionEx.java:637)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:840)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:749)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:619)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:589)
    at org.apache.ignite.Ignition.start(Ignition.java:347)
    ... 1 more
Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/BeansException
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.apache.ignite.internal.IgniteComponentType.create0(IgniteComponentType.java:275)
    ... 8 more
Caused by: java.lang.ClassNotFoundException: org.springframework.beans.BeansException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 11 more

В поисках других подобных проблем я видел, что это из-за того, что не удалось включить ignite-spring в файл pom. Однако я включил это. Вот мой файл pom:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>
  <build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.5.1</version>
      <configuration>
       <source>1.8</source>
       <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.apache.ignite</groupId>
      <artifactId>ignite-core</artifactId>
      <version>1.6.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.ignite</groupId>
      <artifactId>ignite-spring</artifactId>
      <version>1.6.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.ignite</groupId>
      <artifactId>ignite-indexing</artifactId>
      <version>1.6.0</version>
    </dependency>
  </dependencies>
</project>

Где я ошибаюсь? Важный в IDE привел к тому, что что-то стало несовместимым? Является ли моя команда для запуска кода неполной или ошибочной? Спасибо за помощь. Если необходимо, вот первые строки моего кода, в которых возникает ошибка:

package com.mycompany.app;

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.StringTokenizer;

public class App
{
    public static void main( String[] args ) {
        printClasspath();
        String data;
        try {
            data = readFile("tweet.txt");
            Ignite ignite = Ignition.start("/ignite-1.6.0/examples/config/example-ignite.xml");
            IgniteCache<Integer, String[]> cache = ignite.getOrCreateCache("myCacheName");
        ...
        }
     }
}

person Jeremy London    schedule 19.08.2016    source источник


Ответы (2)


Предлагаю сделать следующее:

  1. Упакуйте все свои классы приложений (без зависимостей Ignite) в JAR и поместите его в папку IGNITE_HOME/libs.
  2. Установите переменную окружения MAIN_CLASS в свой основной класс (com.mycompany.app.App).
  3. Запустите IGNITE_HOME/bin/ignite.sh скрипт. Он правильно сформирует параметр classpath для Java со всеми необходимыми зависимостями Ignite и запустит ваше приложение.
person Valentin Kulichenko    schedule 19.08.2016
comment
Спасибо за быстрый ответ, я смог заставить его работать таким образом. Мне было интересно, был ли это предпочтительный способ запуска приложения при воспламенении. Это единственный способ сделать это? Я спрашиваю, потому что в нашей настройке мы не хотели бы, чтобы каждый пользователь помещал свои банки в общий IGNITE_HOME/libs. Кроме того, как бы вы соединили несколько серверов вместе, если все они пытаются запустить основной класс? Я не слишком много заморачивался с системой управления, но менеджер сетки выдает ошибки, если я пытаюсь настроить некоторые серверы без установленного основного класса, а затем запускаю один с ним. - person Jeremy London; 20.08.2016
comment
Вы можете запустить столько автономных серверов, сколько захотите. Показанный выше подход — лишь один из способов запуска приложения с зависимостями Ignite (очевидно, не единственный). - person Valentin Kulichenko; 20.08.2016

Поскольку классы не идентифицируются нашим классом Java, обратитесь к следующим командам

УСТАНОВКА НА UNIX

  1. Загрузите сайт https://ignite.apache.org/download.cgi

  2. apache-ignite-fabric-1.5.0-b1-bin распаковать эту папку

    В этом примере мой каталог «apache-ignite-fabric-1.5.0-b1-bin», расположенный в «/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin»,

  3. Пример программы HelloWorld:

    //program starting#################################################################################################################################
    
    import org.apache.ignite.Ignite;
    import org.apache.ignite.IgniteException;
    import org.apache.ignite.Ignition;
    import org.apache.ignite.IgniteCache;
    //import org.apache.ignite.internal.util.spring;
    public class HelloWorld {
      public static void main(String[] args) throws IgniteException {
        try (Ignite ignite = Ignition.start("/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/examples/config/example-ignite.xml")) {
          // Put values in cache.
          IgniteCache<Integer, String> cache = ignite.getOrCreateCache("myCache");
          cache.put(1, "Hello");
          cache.put(2, "World");
          cache.put(3,"Durga Prasad");
          // Get values from cache
          // Broadcast 'Hello World' on all the nodes in the cluster.
          ignite.compute().broadcast(()->System.out.println(cache.get(1) + " " + cache.get(2) + " " +cache.get(3)));
        }
      }
    }
    
    
    //end program ###################################################################################################################### 
    
  4. Этот файл HelloWorld.java создается в папке «[stp@ril-srv-sp4 apache-ignite-fabric-1.5.0-b1-bin]$ cd libs».

    Перед компиляцией этой программы мы должны определить все местоположения jar в папке «/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs», а также внутри подпапок.

    [stp@ril-srv-sp4 apache-ignite-fabric-1.5.0-b1-bin]$ cd libs
    javac -cp "/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-core-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/cache-api-1.0.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-shmem-1.0.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/commons-codec-1.6.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/h2-1.3.175.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/ignite-indexing-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/lucene-core-3.5.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/commons-logging-1.1.1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-beans-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-expression-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/ignite-spring-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-context-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-jdbc-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-aop-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-core-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-tx-4.1.0.RELEASE.jar" HelloWorld.java
    
  5. создайте файл jar, используя «HelloWorld.class»

    jar -cf HelloWorld.jar HelloWorld.class
    
  6. запустите этот файл jar вместе с классом

    [stp@ril-srv-sp4 libs]$ java -cp "/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-core-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/cache-api-1.0.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-shmem-1.0.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/commons-codec-1.6.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/h2-1.3.175.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/ignite-indexing-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-indexing/lucene-core-3.5.0.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/commons-logging-1.1.1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-beans-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-expression-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/ignite-spring-1.5.0-b1.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-context-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-jdbc-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-aop-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-core-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/ignite-spring/spring-tx-4.1.0.RELEASE.jar:/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/libs/HelloWorld.jar" HelloWorld
    [14:14:26]    __________  ________________
    [14:14:26]   /  _/ ___/ |/ /  _/_  __/ __/
    [14:14:26]  _/ // (7 7    // /  / / / _/
    [14:14:26] /___/\___/_/|_/___/ /_/ /___/
    [14:14:26]
    [14:14:26] ver. 1.5.0-b1#20151202-sha1:062d440c
    [14:14:26] 2015 Copyright(C) Apache Software Foundation
    [14:14:26]
    [14:14:26] Ignite documentation: http://ignite.apache.org
    [14:14:26]
    [14:14:26] Quiet mode.
    [14:14:26]   ^-- Logging to file '/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/work/log/ignite-6790e4dd.0.log'
    [14:14:26]   ^-- To see **FULL** console log here add -DIGNITE_QUIET=false or "-v" to ignite.{sh|bat}
    [14:14:26]
    [14:14:26] OS: Linux 3.10.0-327.el7.x86_64 amd64
    [14:14:26] VM information: OpenJDK Runtime Environment 1.8.0_102-b14 Oracle Corporation OpenJDK 64-Bit Server VM 25.102-b14
    [14:14:26] Configured plugins:
    [14:14:26]   ^-- None
    [14:14:26]
    [14:14:26] Security status [authentication=off, tls/ssl=off]
    [14:14:28] Performance suggestions for grid  (fix if possible)
    [14:14:28] To disable, set -DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true
    [14:14:28]   ^-- Disable peer class loading (set 'peerClassLoadingEnabled' to false)
    [14:14:28]   ^-- Disable grid events (remove 'includeEventTypes' from configuration)
    [14:14:28]
    [14:14:28] To start Console Management & Monitoring run ignitevisorcmd.{sh|bat}
    [14:14:28]
    [14:14:28] Ignite node started OK (id=6790e4dd)
    [14:14:28] Topology snapshot [ver=2, servers=2, clients=0, CPUs=4, heap=14.0GB]
    Hello World Durga Prasad
    [14:14:29] Ignite node stopped OK [uptime=00:00:00:633]
    
  7. Откройте другой терминал с файлом example-ignite.xml

    [stp@ril-srv-sp4 bin]$ ./ignite.sh "/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/examples/config/example-ignite.xml"
    OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
    [14:14:17]    __________  ________________
    [14:14:17]   /  _/ ___/ |/ /  _/_  __/ __/
    [14:14:17]  _/ // (7 7    // /  / / / _/
    [14:14:17] /___/\___/_/|_/___/ /_/ /___/
    [14:14:17]
    [14:14:17] ver. 1.5.0-b1#20151202-sha1:062d440c
    [14:14:17] 2015 Copyright(C) Apache Software Foundation
    [14:14:17]
    [14:14:17] Ignite documentation: http://ignite.apache.org
    [14:14:17]
    [14:14:17] Quiet mode.
    [14:14:17]   ^-- Logging to file '/home/stp/ignite/apache-ignite-fabric-1.5.0-b1-bin/work/log/ignite-825641bf.0.log'
    [14:14:17]   ^-- To see **FULL** console log here add -DIGNITE_QUIET=false or "-v" to ignite.{sh|bat}
    [14:14:17]
    [14:14:17] OS: Linux 3.10.0-327.el7.x86_64 amd64
    [14:14:17] VM information: OpenJDK Runtime Environment 1.8.0_102-b14 Oracle Corporation OpenJDK 64-Bit Server VM 25.102-b14
    [14:14:17] Configured plugins:
    [14:14:17]   ^-- None
    [14:14:17]
    [14:14:17] Security status [authentication=off, tls/ssl=off]
    [14:14:19] Performance suggestions for grid  (fix if possible)
    [14:14:19] To disable, set -DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true
    [14:14:19]   ^-- Disable peer class loading (set 'peerClassLoadingEnabled' to false)
    [14:14:19]   ^-- Disable grid events (remove 'includeEventTypes' from configuration)
    [14:14:19]
    [14:14:19] To start Console Management & Monitoring run ignitevisorcmd.{sh|bat}
    [14:14:19]
    [14:14:19] Ignite node started OK (id=825641bf)
    [14:14:19] Topology snapshot [ver=1, servers=1, clients=0, CPUs=4, heap=1.0GB]
    [14:14:28] New version is available at ignite.apache.org: 1.7.0
    [14:14:28] Topology snapshot [ver=2, servers=2, clients=0, CPUs=4, heap=14.0GB]
    Hello World Durga Prasad
    [14:14:29] Topology snapshot [ver=3, servers=1, clients=0, CPUs=4, heap=1.0GB]
    
person y durga prasad    schedule 06.12.2016