Я создал пользовательскую процедуру neo4j.Он также компилируется и работает в neo4j.
Недавно, однако, я добавил в свой плагин процедуры зависимость, которая не позволяет запускать neo4j при попытке запустить только что созданный jar.Конкретно, я получаю следующее исключение в нижней части трассировки стека:
Caused by: java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
Единственное, что я изменил, - это добавление MapDB в мои зависимости.Поэтому я подозреваю, что это зависит от какого-то подписанного артефакта.Оказывается, плагины neo4j - это «uber-jars» (то есть затененные jar-файлы), которые не очень хорошо работают со знаковыми зависимостями.
Я подумал, что мог бы попытаться исключить MapDB из затенения, изменив область видимости.на provided
и дополнительно добавив jar mapdb в папку плагинов neo4j.Таким образом, папка плагинов в neo4j теперь включает в себя и mapdb.jar
, и myprocedure.jar
.
Это, похоже, не работает: neo4j запускается, но при вызове моей процедуры я получаю ClassNotFound
Exception.
Любые идеи о том, как я могу решить эту дилемму?Я действительно зависим от чего-то вроде MapDB, поскольку мой график очень большой, и постоянное хранение в памяти всех моих процедур приводит к исключениям памяти.
Заранее большое спасибо!
Важноечасть моего pom.xml
должна помочь (я начал с шаблона процедуры , поэтому он все еще выглядит очень похоже):
<dependencies>
<!-- other dependencies that don't make a difference ... -->
<dependency>
<groupId>org.mapdb</groupId>
<artifactId>mapdb</artifactId>
<version>3.0.7</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
<version>${neo4j.version}</version>
<scope>provided</scope>
</dependency>
<!-- Test Dependencies -->
<dependency>
<groupId>org.neo4j.test</groupId>
<artifactId>neo4j-harness</artifactId>
<version>${neo4j.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.neo4j.driver</groupId>
<artifactId>neo4j-java-driver</artifactId>
<version>1.4.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<!-- Neo4j Procedures require Java 8 -->
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<!-- This generates a jar-file with our procedure code,
plus any dependencies marked as `compile` scope.
This should then be deployed in the `plugins` directory
of each Neo4j instance in your deployment.
After a restart, the procedure is available for calling. -->
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>