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

时间:2015-06-02 17:40:36

标签: java eclipse spring maven java-native-interface

使用nar-maven-plugin将C ++ JNI添加到使用Java 1.8.0_45,Maven 3.3.3,在OSX Yosemite 10.10.3上的nar-maven-plugin 3.2.3的现有Spring Tools Suite(STS)项目中,我得到javah目标的以下错误:

// Before (with nested CoGroupByKey)
originalResult.getOnly(locationDataTag).getOnly(groupedCarsTag).getAll(usersTag);

// After (with a single CoGroupByKey)
newResult.getAll(usersTag);

我已经将我的本地课程与基础配对:

[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]

以下是来自现有STS版本的pom.xml的差异:

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

我通过" mvn nar:nar-javah"运行了javah。成功地为nar-maven-plugin设置了0003,0005和0007.例如,非常感谢任何调试技巧,变通方法或替代JNI maven配置工具选项。

1 个答案:

答案 0 :(得分:2)

对我来说,这个问题是由于Apache BCEL 5.2版中的bug 173造成的,这是nar-maven-plugin的依赖。我的类使用了Java 8的功能(即Lambdas)和本机方法,我收到了上述消息。

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