In Apache Hadoop, the assembly does something similar to what you described. We use the Apache Maven AntRun Plugin at compile time to make an external call to cmake , and then call make on the generated output using CMake to compile and link part C of our codebase. This output is then loaded into our final build artifacts. In our case, those that create artifacts are tarballs, not directly linked to a jar file, but you can execute it by controlling the configuration of the Apache Maven JAR Plugin . In particular, you may need to override the content to enable / exclude settings .
If you want to use it as a starting point, the corresponding part of the Hadoop assembly is visible here:
https://github.com/apache/hadoop/blob/release-2.7.3-RC2/hadoop-common-project/hadoop-common/pom.xml#L598-L615
<execution> <id>make</id> <phase>compile</phase> <goals><goal>run</goal></goals> <configuration> <target> <exec executable="cmake" dir="${project.build.directory}/native" failonerror="true"> <arg line="${basedir}/src/ -DGENERATED_JAVAH=${project.build.directory}/native/javah -DJVM_ARCH_DATA_MODEL=${sun.arch.data.model} -DREQUIRE_BZIP2=${require.bzip2} -DREQUIRE_SNAPPY=${require.snappy} -DCUSTOM_SNAPPY_PREFIX=${snappy.prefix} -DCUSTOM_SNAPPY_LIB=${snappy.lib} -DCUSTOM_SNAPPY_INCLUDE=${snappy.include} -DREQUIRE_OPENSSL=${require.openssl} -DCUSTOM_OPENSSL_PREFIX=${openssl.prefix} -DCUSTOM_OPENSSL_LIB=${openssl.lib} -DCUSTOM_OPENSSL_INCLUDE=${openssl.include} -DEXTRA_LIBHADOOP_RPATH=${extra.libhadoop.rpath}"/> </exec> <exec executable="make" dir="${project.build.directory}/native" failonerror="true"> <arg line="VERBOSE=1"/> </exec> <exec executable="make" dir="${project.build.directory}/native" failonerror="true"></exec> </target> </configuration> </execution>
Chris nauroth
source share