在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 request是nar-maven-plugin
的依赖项。我的课程使用了Java 8功能(即Lambdas)和本机方法,我收到了以上消息。
我创建了一个来切换到公认的官方未发布的BCEL 6版本。我重新编译了插件并使用了固定的插件,这为我解决了问题。