2

如果我没有使用正确的术语,我深表歉意,但我对 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>
4

0 回答 0