繁体   English   中英

使用 CMake 和 Maven 构建 C++ 和 Java 代码并将其捆绑在 jar 中

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

我有使用 CMake 构建的遗留 C++ 代码。 它生成一个.so文件。 我需要用 Java 包装此代码并构建一个包含 Java 代码和 C++ 的jar以进行部署。

使用 CMake 构建 C++ 代码的步骤很简单:

cd /to/pkg/dir
cmake .
make

.so文件在build/目录下生成。 如果我将整个项目转换为 maven,我将不得不修改目录结构(这是一篇解释如何工作的博客文章: http : //blog.bigpixel.ro/2012/07/building-cc-applications-与-maven/ )。 但是,我不想这样做。 是否可以选择从 maven 调用上面显示的前两行来构建.so文件,然后将其包含在最终的jar

在 Apache Hadoop 中,构建执行的操作类似于您所描述的。 我们在编译阶段使用Apache Maven AntRun 插件cmake进行外部调用,然后在 CMake 生成的构建输出上调用make来编译和链接我们代码库的 C 部分。 此输出然后输入到我们的最终构建工件中。 在我们的例子中,这些构建工件是 tarball,而不是直接捆绑到 jar 文件中,但您可以通过控制Apache Maven JAR Plugin 的配置来完成它。 具体来说,您可能需要覆盖内容包含/排除设置

如果您想将其用作起点,可以在此处查看 Hadoop 构建的相关部分:

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM