使用 nar-maven-plugin 将 C++ JNI 添加到 OSX Yosemite 10.10.3 上使用 Java 1.8.0_45、Maven 3.3.3、nar-maven-plugin 3.2.3 的现有 Spring Tools Suite (STS) 项目,我得到javah 目标出现以下错误:
[ERROR] Failed to execute goal com.github.maven-nar:nar-maven-plugin:3.2.3: \
nar-javah (default-nar-javah) on project archivist: \
JAVAH: Class could not be inspected: Invalid byte tag in constant pool: 18 -> [Help 1]
我已将我的 native 类与基础知识配对:
package com.zorroa.archivist.processors;
public class CaffeProcessor {
public final native int test();
CaffeProcessor() {
System.out.println(test());
}
}
以下是我的 pom.xml 与现有 STS 版本的差异:
diff --git a/pom.xml b/pom.xml
index a62a27e..08fe118 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
<groupId>com.zorroa</groupId>
<artifactId>archivist</artifactId>
<version>1.0.0</version>
- <packaging>jar</packaging>
+ <packaging>nar</packaging>
<name>zorroa-archivist</name>
<description>Demo project for Spring Boot</description>
@@ -102,15 +102,55 @@
<artifactId>hazelcast</artifactId>
<version>3.4.2</version>
</dependency>
-
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.7</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>@project.groupId@</groupId>
+ <artifactId>nar-maven-plugin</artifactId>
+ <version>@project.version@</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
+ <plugin>
+ <groupId>com.github.maven-nar</groupId>
+ <artifactId>nar-maven-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <cpp>
+ <debug>true</debug>
+ </cpp>
+ <libraries>
+ <library>
+ <type>jni</type>
+ <narSystemPackage>com.zorroa.archivist.processors</narSystemPackage>
+ </library>
+ </libraries>
+ <javah>
+ <includes>
+ <include></include>
+ </includes>
+ </javah>
+ <tests>
+ <test>
+ <name>Caffe</name>
+ </test>
+ </tests>
+ </configuration>
+ </plugin>
</plugins>
</build>
</project>
我已经通过“mvn nar:nar-javah”成功地为 nar-maven-plugin it 示例 0003、0005 和 0007 运行了 javah。非常感谢任何调试技巧、解决方法或替代 JNI maven 配置工具选项。
最佳答案
对我来说,这个问题是由于 bug 173 引起的在 Apache BCEL 版本 5.2 中,它是 nar-maven-plugin 的依赖项。我的类(class)使用了 Java 8 功能(即 Lambda)和 native 方法,我收到了上述消息。
我创建了一个pull request切换到公认的官方未发布的 BCEL 6 版本。我重新编译了该插件并使用了修复后的插件,这解决了我的问题。
关于java - nar-maven-plugin javah 失败,常量池中的字节标记无效 : 18,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30602965/