在OSX Yosemite 10.10.3上使用Java 1.8.0_45,Maven 3.3.3,nar-maven-plugin 3.2.3将使用nar-maven-plugin的C ++ JNI添加到现有的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]


我已经将本机类与基础知识配对:

package com.zorroa.archivist.processors;
public class CaffeProcessor {
    public final native int test();
    CaffeProcessor() {
        System.out.println(test());
    }
}


这是现有STS版本中pom.xml的差异:

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示例0003、0005和0007运行了javah。非常感谢任何调试技巧,解决方法或替代的JNI maven配置工具选项。

最佳答案

对我而言,此问题是由于Apache BCEL版本5.2中的bug 173引起的,而pull requestnar-maven-plugin的依赖项。我的课程使用了Java 8功能(即Lambdas)和本机方法,我收到了以上消息。

我创建了一个来切换到公认的官方未发布的BCEL 6版本。我重新编译了插件并使用了固定的插件,这为我解决了问题。

09-27 01:59