The example uses javah to generate native header files which are then be part of the native build to create a Windows DLL
Note:
<project> ... <packaging>dll</packaging> <dependencies> <dependency> your jar which has jni interface. </dependency> <dependency> other native library ( .lib, .so, .a, .o, etc) to be linked in. </dependency> ... </dependencies> ... <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>native-maven-plugin</artifactId> <extensions>true</extensions> <configuration> <!-- trigger javah execution --> <javahClassNames> <javahClassName>class1</javahClassName> <javahClassName>class2</javahClassName> <javahClassName>...</javahClassName> </javahClassNames> <!-- enable additional javah interface in dependencies list --> <javahSearchJNIFromDependencies>true</javahSearchJNIFromDependencies> <!-- | Add jdk include directories to system include path | Override ${jkdIncludePath} If your jdk does not conform to Sun JDK layout --> <javahOS>win32</javahOS> <!-- setup compiler and linker environment according to msvc 6 vcvars32.bat --> <!-- without this setting, you will need to setup the environment outside --> <!-- of Maven --> <envFactoryName>org.codehaus.mojo.natives.msvc.MSVC6EnvFactory</envFactoryName> <compilerProvider>msvc</compilerProvider> <compilerStartOptions> <compilerStartOption> /MD /W4 -O</compilerStartOption> <compilerStartOption>-D_WIN32_WINNT=0x0500 </compilerStartOption> </compilerStartOptions> <sources> <source> <-- relative to your project directory --> <directory>../src/main/native</directory> <fileNames> <fileName>file1.c</fileName> <fileName>file2.c</fileName> <fileName>...</fileName> </fileNames> </source> <source> <directory>src/main/native</directory> <fileNames> <fileName>file3.c</fileName> <fileName>file4.c</fileName> <fileName>...</fileName> </fileNames> </source> <!-- additional include path --> <source> <directory>...</directory> </source> <!-- additional system include path --> <source> <directory>...</directory> <dependencyAnalysisParticipation>false</dependencyAnalysisParticipation> </source> </sources> <!-- deploy the accompany .lib file as well --> <linkerSecondaryOutputExtensions>lib</linkerSecondaryOutputExtensions > <linkerStartOptions> <linkerStartOption> /INCREMENTAL:NO /DLL user32.lib advapi32.lib oldnames.lib kernel32.lib </linkerStartOption> </linkerStartOptions> </configuration> </build> </project>