Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 974
Adiesha Avatar asked Dec 18 '22 20:12

Adiesha


1 Answers

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.

like image 138
NaderNader Avatar answered Feb 08 '23 23:02

NaderNader