java - nar-maven-plugin javah 失败,常量池中的字节标记无效 : 18

标签 java eclipse spring maven java-native-interface

使用 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/

相关文章:

android - eclipse 不在 logcat 中仅显示 galaxy nexus 的时间?

java - 是否存在 'new' 优先于 Spring Autowire 的情况

java - 为什么HashMap执行多次后会返回null和字符串值?

java - Renderscript 支持库的问题

c++ - 使用 Eclipse 的 OpenCV2

java - DelegatingFilterProxy 中的 NoSuchBeanDefinitionException

java - 在运行时将动态值传递给 kafka 消费者主题以实现消息驱动的 channel 适配器

java - 代码在 java 7u55 上运行比以前的版本慢得多?

java - 带有打包依赖项的 Maven 构建 jar

java - 如何检查我的代码中按钮的背景(在我设计的各种可绘制 xml 之间)以便我可以修改它?