Функция наследования maven может значительно сократить ваш шаблонный код. Для простоты я опустил javah и другие вещи JNI и просто создал два C-проекта и общий родительский проект. Структура каталогов выглядит следующим образом:
+-NativeParent
! !
! +-src/main/native
! +-pom.xml
+-NativeTest1
! !
! +-pom.xml
+-NativeTest2
!
+-pom.xml
NativeParent содержит весь исходный код, а pom.xml содержит почти все определения:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>nativeParent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>parent-pom</name>
<modules>
<module>../NativeTest1</module>
<module>../NativeTest2</module>
</modules>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>native-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<sources>
<source>
<directory>../NativeParent/src/main/native</directory>
<fileNames>
<fileName>krbwinclient.c</fileName>
</fileNames>
</source>
</sources>
<linkerStartOptions>
<linkerStartOption>-Wl,--kill-at</linkerStartOption>
<linkerStartOption>-shared</linkerStartOption>
</linkerStartOptions>
<linkerEndOptions>
<linkerEndOption>-lSecur32</linkerEndOption>
<linkerEndOption>-lOle32</linkerEndOption>
</linkerEndOptions>
</configuration>
</plugin>
</plugins>
</build>
</project>
Помпы NativeTest1 и NativeTest2 могут быть довольно скудными, поскольку им нужно только определить свойства, отличные от родительского помпа.
Родной тест1:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>test</groupId>
<artifactId>nativeParent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>test</groupId>
<artifactId>native1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>so</packaging>
<build>
<finalName>native1.so</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>native-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<compilerStartOptions>
<compilerStartOption>-Wl,--add-stdcall-alias</compilerStartOption>
<compilerStartOption>-DBUILD_SO</compilerStartOption>
</compilerStartOptions>
</configuration>
</plugin>
</plugins>
</build>
</project>
И НативТест2:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>test</groupId>
<artifactId>nativeParent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>test</groupId>
<artifactId>native2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>dll</packaging>
<build>
<finalName>native1.so</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>native-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<compilerStartOptions>
<compilerStartOption>-Wl,--add-stdcall-alias</compilerStartOption>
<compilerStartOption>-DBUILD_DLL</compilerStartOption>
</compilerStartOptions>
</configuration>
</plugin>
</plugins>
</build>
</project>
Отличаются только тип пакета, имя цели и параметры компиляции, но большая часть конфигурации берется из файла parent-pom.
Обратите внимание, что есть только одно свойствоcompileStartOption-Property, поэтому, хотя вы можете использовать несколько атрибутов с одинаковыми именами в дочерней помпе, вы потеряете все записи с одинаковыми именами из родительской помпы.
Я надеюсь, что это то, что вы искали - это все еще немного шаблонного кода, но он значительно сокращен.
person
piet.t
schedule
08.08.2013