如果我没有使用正确的术语,我深表歉意,但我对 Maven 和 JNI 还是很陌生。
这是我的问题。
我有一个依赖 JNI 来使用 c++ 源的 Android 项目 (A)。c++ 代码位于一个独立的项目(A-native)中,该项目构建了一个 .so 库(A-android.so)。使用本机函数的 java 包装器位于一个单独的项目 (A-java) 中,该项目依赖于 A-android.so。A-java 是使用 maven-compiler-plugin 构建的。
这个项目工作正常,我在为 A-java 的 pom 中定义两个项目之间的依赖关系没有问题。
现在我正在创建一个具有完全相同结构的新项目 (B)。它由两部分组成:一是生成 .so 文件 (B-android.so) 的 c++ 代码 (B-native);一个带有依赖于 B-android.so 的 java 包装器 (B-java)。
B-native 的一部分是来自旧项目的重复代码,所以我想在构建 B-android.so 并重用 A-本国的。
我试图将 A-android.so 包含在 B-native pom 的依赖项中,但是当我运行 mvn clean install 时仍然出现错误,因为找不到 A-native 中定义的类。请注意,我已将 .h 文件包含在我的 B-native 包含目录中。
我真的很感激有人可以向我解释处理这种依赖关系的正确方法。
谢谢!
更新:这是构建 c++ 代码的两个项目的 pom。如您所见,它们是相同的,只是项目 B 的一个在依赖项中添加了项目 A
项目A
<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>myGroup</groupId>
<artifactId>ProjectA</artifactId>
<version>1.0</version>
</parent>
<packaging>so</packaging>
<artifactId>ProjectA-Native</artifactId>
<name>ProjectA-Native</name>
<build>
<plugins>
<!-- Maven Compiler plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<!-- Use java 1.6 -->
<configuration>
<source>1.6</source>
<target>1.6</target>
<goals>
<goal>compile</goal>
</goals>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<filesets>
<fileset>
<directory>libs</directory>
</fileset>
<fileset>
<directory>obj</directory>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.0.0</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
</project>
项目 B
<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>myGroup</groupId>
<artifactId>ProjectB-Native</artifactId>
<version>1.0</version>
</parent>
<packaging>so</packaging>
<artifactId>ProjectB-Native</artifactId>
<name>ProjectB-Native</name>
<dependencies>
<dependency>
<groupId>myGroup</groupId>
<artifactId>ProjectA-Native</artifactId>
<version>${project.version}</version>
<type>so</type>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Maven Compiler plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<!-- Use java 1.6 -->
<configuration>
<source>1.6</source>
<target>1.6</target>
<goals>
<goal>compile</goal>
</goals>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<filesets>
<fileset>
<directory>libs</directory>
</fileset>
<fileset>
<directory>obj</directory>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.0.0</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
</project>