Building C++ and Java code using CMake and Maven and bundle in a jar

后端 未结 1 408
走了就别回头了
走了就别回头了 2021-02-05 21:08

I have legacy C++ code that is built using CMake. It generates a .so file. I need to wrap this code in Java and build a jar that includes Java code as

相关标签:
1条回答
  • 2021-02-05 21:12

    In Apache Hadoop, the build does something similar to what you described. We use the Apache Maven AntRun Plugin during the compile phase to make an external call to cmake and then call make on the build output generated by CMake to compile and link the C portion of our codebase. This output then feeds into our final build artifacts. In our case, those build artifacts are tarballs rather than bundled straight into a jar file, but you could accomplish it by controlling configuration of the Apache Maven JAR Plugin. Specifically, you may need to override content include/exclude settings.

    If you'd like to use it as a starting point, the relevant part of the Hadoop build 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>
          <!-- The second make is a workaround for HADOOP-9215.  It can
               be removed when version 2.6 of cmake is no longer supported . -->
          <exec executable="make" dir="${project.build.directory}/native" failonerror="true"></exec>
        </target>
      </configuration>
    </execution>
    
    0 讨论(0)
提交回复
热议问题