正しい用語を使用していない場合はお詫びしますが、MavenとJNIはかなり新しいです。
これが私の問題です。
C ++ソースを使用するためにJNIに依存するAndroidプロジェクト(A)があります。c ++コードは、.soライブラリ(A-android.so)を構築する独立したプロジェクト(A-native)にあります。ネイティブ関数を使用するJavaラッパーは、A-android.soに依存する別のプロジェクト(A-java)内にあります。A-javaは、maven-compiler-pluginを使用して構築されます。
このプロジェクトは正常に機能し、A-javaのpomで2つのプロジェクト間の依存関係を定義することに問題はありません。
今、私はまったく同じ構造を持つ新しいプロジェクト(B)を作成しています。これは2つの部分で構成されています。1つは.soファイル(B-android.so)を生成するc ++コード(B-native)です。1つはB-android.soに依存するjavaラッパー(B-java)を使用します。
B-nativeの一部は古いプロジェクトから重複したコードであるため、B-android.soをビルドするときに、B-nativeのpom.xmlの依存関係にA-android.soを含め、A-で定義されたオブジェクトを再利用したいと思います。ネイティブ。
B-native pomの依存関係にA-android.soを含めようとしましたが、mvn clean installを実行すると、A-nativeで定義されたクラスが見つからないため、エラーが発生します。Bネイティブのインクルードディレクトリに.hファイルをインクルードしたことに注意してください。
この種の依存関係を処理する正しい方法を誰かが説明してくれると本当にありがたいです。
ありがとう!
更新:c++コードをビルドする2つのプロジェクトの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>