Neo4j вбрасывает броски IllegalArgumentException: Config не связан с настройкой: 'unsupported.dbms.lucene.ephemeral' - PullRequest
2 голосов
/ 07 февраля 2020

В настоящее время я занимаюсь разработкой приложения java (с maven) со встроенной базой данных neo4j. Я следовал официальному руководству , а также посмотрел примеры на github .

. Теперь мой код выглядит так:

import org.neo4j.dbms.api.DatabaseManagementService;
import org.neo4j.dbms.api.DatabaseManagementServiceBuilder;
import org.neo4j.graphdb.*;

import static org.neo4j.configuration.GraphDatabaseSettings.DEFAULT_DATABASE_NAME;

public class GraphDatabase {

    private DatabaseManagementService managementService;
    private GraphDatabaseService databaseService;

    public void start(String dir) {
        managementService = new DatabaseManagementServiceBuilder(new File(dir)).build();

        databaseService = managementService.database(DEFAULT_DATABASE_NAME);
    }
...
}

В pom. xml я включил:

<dependency>
   <groupId>org.neo4j</groupId>
   <artifactId>neo4j</artifactId>
   <version>4.0.0</version>
</dependency>
...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.2.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <mainClass>{myPackageHere}.App</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

При работе в Intellij IDE проблем нет, но когда я компилирую с mvn package и выполняю с java -jar <name>.jar, я получаю следующее исключение:

java.lang.IllegalArgumentException: Config has no association with setting: 'unsupported.dbms.lucene.ephemeral'
        at org.neo4j.configuration.Config.getObserver(Config.java:635)
        at org.neo4j.configuration.Config.set(Config.java:653)
        at org.neo4j.dbms.api.DatabaseManagementServiceBuilder.newDatabaseManagementService(DatabaseManagementServiceBuilder.java:83)
        at org.neo4j.dbms.api.DatabaseManagementServiceBuilder.build(DatabaseManagementServiceBuilder.java:78)

Я пробовал это на linux и windows с одним и тем же исключением.

Кто-нибудь знает, в чем может быть моя проблема?

Обновление:

Я удалил подключаемый модуль maven-Assembly. Если бы я скомпилировал и запустил проект, как это, он работает:

mvn compile
mvn exec:java -Dexec.mainClass={myPackageHere}.App

Но я все равно предпочел бы банку ...

1 Ответ

0 голосов
/ 26 марта 2020

Я столкнулся с тем же исключением, когда пытался создать uber-jar для проекта, который включал Neo4j в качестве встроенной базы данных. В этот момент я также использовал плагин maven-assembly-.

Решение, которое я нашел, состояло в том, чтобы вместо него использовать maven-shade-plugin и включить ServicesResourceTransformer * 1006. * в конфигурации плагина.

Запись maven-shade-plugin в моем pom. xml выглядит следующим образом:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>3.2.2</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <transformers>
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
            <manifestEntries>
              <mainClass>{myPackageHere}.App</mainClass>
            </manifestEntries>
          </transformer>
          <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
        </transformers>
        <filters>
          ...
        </filters>
      </configuration>
    </execution>
  </executions>
</plugin>

Я создаю файл jar с mvn clean package команда. Выполнение jar через java -jar <name>.jar дало мне тот же результат, что и запуск приложения из моей IDE, и не выдало исключение выше.

Некоторый дополнительный контекст : вывод maven- shade-plugin ясно указывает, что несколько зависимостей Neo4j намереваются включать перекрывающиеся сервисы в каталог META-INF/services фляги, например,

[WARNING] neo4j-configuration-4.0.2.jar, neo4j-dbms-4.0.2.jar, neo4j-fulltext-index-4.0.2.jar, neo4j-kernel-4.0.2.jar, neo4j-ssl-4.0.2.jar define 1 overlapping resources: 
[WARNING]   - META-INF/services/org.neo4j.configuration.SettingsDeclaration

Насколько я понимаю, maven-shade-plugin будет сохранять только последние экземпляр соответствующего ресурса, который он видит во время выполнения. ServicesResourceTransformer объединит ресурсы, добавив их содержимое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...