有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用CMASE和Maven和JAR捆绑构建C++和java代码

我有使用CMADE构建的遗留C++代码。它生成一个.so文件。我需要在爪哇中包装这个代码,并构建一个包含{java代码和C++的部署^ ^ < CD2}}。p>

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

cd /to/pkg/dir
cmake .
make

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


共 (1) 个答案

  1. # 1 楼答案

    在ApacheHadoop中,构建过程与您描述的类似。 在编译阶段,我们使用Apache Maven AntRun Plugincmake进行外部调用,然后对CMake生成的构建输出调用make,以编译并链接代码库的C部分。然后,这个输出会反馈到我们的最终构建工件中。在我们的例子中,这些构建工件是tarball,而不是直接绑定到jar文件中,但您可以通过控制Apache Maven JAR Plugin的配置来完成。具体来说,您可能需要覆盖内容include/exclude settings

    如果你想把它作为一个起点,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>