- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经创建了一个 neo4j 用户定义过程。它还可以在 neo4j 中编译和工作。
虽然最近,我向我的过程插件添加了一个依赖项,以防止 neo4j 在我尝试运行新构建的 jar 时启动。具体来说,我在堆栈跟踪的底部收到以下异常:
Caused by: java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
我唯一改变的是将 MapDB 添加到我的依赖项中。所以我怀疑它取决于一些签名的 Artifact 。事实证明,neo4j 插件是“ super jar ”(即阴影 jar ),它不能很好地与签名的依赖项一起工作。
我想我可以通过将范围更改为 provided
并将 mapdb jar 添加到 neo4j 的插件文件夹中来尝试将 MapDB 从阴影中排除。因此,neo4j 的插件文件夹现在包括 mapdb.jar
和 myprocedure.jar
。
但这似乎不起作用:neo4j 启动,但在调用我的过程时我收到一个 ClassNotFound
异常。
关于如何解决这个难题有什么想法吗?我真的很依赖像 MapDB 这样的东西,因为我的图表非常大,并且将我的过程中的所有内容保存在内存中经常会导致内存异常。
非常感谢!
我的 pom.xml
的重要部分应该有帮助(我从 procedure template 开始,所以它看起来仍然很相似):
<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>
最佳答案
因此,一种有效的解决方案是使用 maven-assembly-plugin
而不是 maven-shade-plugin
. assembly 插件创建一个包含所有依赖项的独立 jar,而无需重新打包所有依赖项。
当然,我必须删除 <scope>provided</scope>
对于 mapdb,因此它也包含在组装的 jar 中。
剩下的只是用下面的片段替换阴影插件(感谢这个 question here ):
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
之后我收到另一个异常,我认为是由于错误的签名:
Caused by: java.lang.VerifyError ...
原来这只是因为我在 neo4j 中有另一个过程使用与 mapdb 相同的依赖项。快速修复是删除该过程库。
当然也有其他的解决办法,包括去掉签名,或者重新签名。但是,我明确不想删除任何签名。
关于java - neo4j 程序取决于已签名的 jar (mapdb),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55146245/
我正在探索将 MapDB 实用程序用作由 SSD 支持的堆外 Java 缓存。有人可以建议它是否支持以下内容: 设备对 SSD 设备的访问是否“闪存友好”,即访问是否对齐页面。 它是否允许以批处理模式
我正在研究堆外缓存,似乎找不到太多有关堆上内存消耗与堆外(仍在内存中)内存消耗的信息/基准。 我打算使用MapDB 。文档表明 compression can be applied在序列化对象和/或整
我在测试 mapdb 时遇到内存不足错误。鉴于该项目的整个想法是将数据结构序列化到磁盘并避免内存问题,我认为我做错了什么。有什么想法我做错了吗?还是有bug? @Test public
我在 Android Studio 中编程。我正在使用 mapDB,2.0-beta8 版本。我创建了自己的类 SingleCase,我还定义了一个静态变量: static ConcurrentNav
我正在使用我创建的文件支持的 MapDB: File dbFile = new File("db"); DBMaker.newFileDB(dbFile) .closeOnJvmShutdow
最新版本的 MapDB 是线程安全的吗?我在 Google 和 their website 找不到任何具体内容没有说任何关于锁定的事情。 最佳答案 你可以看到你需要的数据结构的代码注释,像HTreeM
什么时候应该通过 ORM 使用 MapDb 与常规数据库?除了直接映射到 Java.util.Map 之外,还可以使用 ORM 实现。 最佳答案 Jan 的回答有很大的偏见,因为他是 MapDb 的作
所以我有一个包含大约 2000 万个键值对的列表,我将数据以不同的方式存储在几个 MapDB 中,以查看它如何影响我的程序性能,并进行实验。 问题是,将 2000 万个键值对插入(以随机顺序)到 ma
我有一个用例,我想使用不透明的 byte[] 作为 MapDb 的键。我发现了这个 - Using a byte array as Map key - 快速限制;想知道推荐哪种方法。 我宁愿不创建一堆
所以我创建了一个像这样工作的数据库: static class Record implements Serializable { final String action; final
我正在使用 MapDB在一个处理数十亿个需要映射/排队的对象的项目中。程序完成后我不需要任何类型的持久性(MapDB 数据库都是临时的)。我希望程序尽可能快地运行,但我对 MapDB 的 commit
我将 MapDB 用于键值数据库以获得更好的性能。在 map.clear() 之后我的文件没有在磁盘中删除。我需要在 remove() 或 clear() 方法之后回收磁盘空间。下面是我的代码片段。
我在mapdb 中有包含150K 条目的树形图。调用 treemap.clear() 需要几分钟时间。我怎样才能快速做到这一点?使用 创建新的 db.treeMap("pageCache").crea
我正在使用 gwt,并且正在使用 mapdb,当我将数据检索为 map (BTreeMap) 时,gwt 会抛出 rpc 序列化异常。我将 map 包装在一个实现 Serialized 和 IsSer
我已经创建了一个 neo4j 用户定义过程。它还可以在 neo4j 中编译和工作。 虽然最近,我向我的过程插件添加了一个依赖项,以防止 neo4j 在我尝试运行新构建的 jar 时启动。具体来说,我在
我正在尝试序列化和反序列化一个对象以将其存储在 mapDb 中。 我设法使用这个片段序列化对象: ByteArrayOutputStream bos = new ByteArrayOutputStre
我已经实现了一个 hazelcast 服务,该服务通过 MapStoreFactory 和 newMapLoader 将其数据存储到本地 mapdb 实例中。如果需要重新启动集群,可以通过这种方式加载
我尝试直接将 Clojure 的 hashmap 与 MapDB 一起使用,但遇到了奇怪的行为。我检查了 Clojure 和 MapDB 源代码,但无法理解这个问题。 首先一切看起来都很好: lein
在 MapDB 1.x 中,您可以通过调用 db.delete("table name") 和 db.rename("old table name", "新表名”)。但是似乎不再有 API 功能可以执
我想直接从 HDFS 访问 mapdb map ,而不是将其复制到本地文件系统。是否可以?有没有其他方法可以在不使用本地文件系统的情况下读取这些 map ? 最佳答案 您可以将数据读入 byte[],
我是一名优秀的程序员,十分优秀!