Search code examples
javamavenjava-native-interfacejavah

How can I pass -h argument to maven compiler plugin to create JNI header files


I already tried passing this argument in the pom but it does not recognize it. Since jdk 8 we dont have to manually run javah to generate header files rather we can pass -h argument to javac and generate the header files when compiling. So if I can pass "-h dir" to maven compiler plugin I can generate the header files when I run mvn compile

<plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.7.0</version>
      <configuration>
        <compilerArgs>
          <arg>-verbose</arg>
          <arg>-h .</arg>
        </compilerArgs>
      </configuration>
</plugin>

But when I run mvn install I get this

[INFO] BUILD FAILURE

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 2.936 s

[INFO] Finished at: 2018-11-07T14:52:49+05:30

[INFO] Final Memory: 9M/155M

[INFO]------------------------------------------------------------------------

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project adiesha-native: Fatal error compiling: invalid flag: -h . -> [Help 1]

Is there any other way to do this with maven or do i have to manually create them using "javac -h dir"

Any help would be greatly appreciated


Solution

  • I was have the same error "invalid flag: -h target/headers" with my maven build.

    I tried the suggestion from Gyro Gearless above. I separated my original '-h target/headers' into '-h and 'target/headers'. That resolved my issue. Now all jni headers within my project are generated correctly and placed within target/headers.

    Here is the entire compiler plugin config section from my pom.xml:

            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <compilerArgs>
                        <arg>-h</arg>
                        <arg>target/headers</arg>
                     </compilerArgs>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
    

    With this pom, the command 'mvn compile' was enough to generate JNI headers. Note that 'mvn clean' will not remove previously generated headers.