nar-maven-plugin javah 因常量池中的无效字节标记而失败:18
nar-maven-plugin javah failing with Invalid byte tag in constant pool: 18
将使用 nar-maven-plugin 的 C++ JNI 添加到使用 Java 1.8.0_45、Maven 3.3.3、nar-maven 的现有 Spring Tools Suite (STS) 项目-plugin 3.2.3 on OSX Yosemite 10.10.3,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]
我已经将母语 class 与基础知识配对:
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" 成功地通过 运行 javah 为 nar-maven-plugin it 示例 0003、0005 和 0007。任何调试提示、解决方法或替代 JNI maven 配置工具选项是非常感谢。
对我来说,这个问题是由于 Apache BCEL 5.2 版中的 bug 173 引起的,它是 nar-maven-plugin
的依赖项。我的 class 使用了 Java 8 个功能(即 Lambdas)和本机方法,我收到了上述消息。
我创建了一个 pull request 来切换到公认的官方未发布的 BCEL 6 版本。我重新编译了插件并使用了固定的插件,这为我解决了问题。
将使用 nar-maven-plugin 的 C++ JNI 添加到使用 Java 1.8.0_45、Maven 3.3.3、nar-maven 的现有 Spring Tools Suite (STS) 项目-plugin 3.2.3 on OSX Yosemite 10.10.3,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]
我已经将母语 class 与基础知识配对:
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" 成功地通过 运行 javah 为 nar-maven-plugin it 示例 0003、0005 和 0007。任何调试提示、解决方法或替代 JNI maven 配置工具选项是非常感谢。
对我来说,这个问题是由于 Apache BCEL 5.2 版中的 bug 173 引起的,它是 nar-maven-plugin
的依赖项。我的 class 使用了 Java 8 个功能(即 Lambdas)和本机方法,我收到了上述消息。
我创建了一个 pull request 来切换到公认的官方未发布的 BCEL 6 版本。我重新编译了插件并使用了固定的插件,这为我解决了问题。