生成 .so 文件的 Maven Repo,在 Maven 项目中用作依赖项
Maven Repo That Generates .so File, use as dependency in Maven Project
见鬼去吧,
首先,我正在使用 Android,当涉及到在我的 Android 项目中自动使用本机库时,我对 Maven 构建过程有一些疑问。我说自动化是因为目前我可以获取本机项目 (repo) 并构建我需要的 .so 文件(通过 Maven 构建过程),然后我只需复制该 .so 文件并将其放入我的主要项目本机 libs 文件夹(即 mainProject/src/main/libs/armeabi-v7a/nativeLib.所以)。所以...我的本机项目pom.xml踢出.so文件如下所示(构建区域)
<packaging>so</packaging>
<properties>
<android.ndk.args>V=1 -B NDK_DEBUG=1 -j8</android.ndk.args>
<arch>armeabi-v7a</arch>
<mavenAntrunPluginVersion>1.8</mavenAntrunPluginVersion>
</properties>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav</artifactId>
<version>1.0-beta-2</version>
</extension>
</extensions>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>${mavenAntrunPluginVersion}</version>
<executions>
<execution>
<phase>validate</phase>
<configuration>
<tasks>
<exec
dir="${project.basedir}/src/main/java/com/abc/myClass"
executable="javac"
failonerror="true">
<arg value="myClass.java"/>
</exec>
<exec
dir="${project.basedir}"
executable="javah"
failonerror="true">
<arg value="-d"/>
<arg value="${project.basedir}/target/jni/include"/>
<arg value="-classpath"/>
<arg value="${project.basedir}/src/main/java"/>
<arg value="com.abc.myClass.MyClass"/>
</exec>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.simpligility.maven.plugins</groupId>
<artifactId>android-ndk-maven-plugin</artifactId>
<version>1.0.1-SNAPSHOT</version>
<extensions>true</extensions>
<configuration>
<target>${project.artifactId}</target>
<finalLibraryName>${project.artifactId}</finalLibraryName>
<ndkPath>${android.ndk.path}</ndkPath>
<applicationMakefile>src/main/cpp/Application.mk</applicationMakefile>
<makefile>src/main/cpp/Android.mk</makefile>
<architectures>${arch}</architectures>
<additionalCommandline>${android.ndk.args}</additionalCommandline>
<librariesOutputDirectory>${project.build.directory}/ndk-libs</librariesOutputDirectory>
<objectsOutputDirectory>${project.build.directory}/ndk-obj</objectsOutputDirectory>
<headerFilesDirectives>
<headerFilesDirective>
<directory>${basedir}/src/main/cpp</directory>
<includes>
<include>**\/*.hpp</include>
</includes>
</headerFilesDirective>
</headerFilesDirectives>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
所以这会将 .so 放入 myNativeProject/target/ndk-obj/armeabi-v7a/nativeLib.so 中。然后我通常将其复制到我的主要项目中。我尝试使该项目成为 .so 类型的依赖项,但它无法识别它。如何将其添加到我的主项目中?提前谢谢了。
好的,
所以基本上在 .so 项目中我使用 'build-helper-maven-plugin' 来附加我的 .so 工件。然后在我的主项目中,我使用 'maven-dependency-plugin' 将 .so 文件复制(目标设置为复制)到本机输出目录。如果有人需要更多信息,请发表评论。
见鬼去吧,
首先,我正在使用 Android,当涉及到在我的 Android 项目中自动使用本机库时,我对 Maven 构建过程有一些疑问。我说自动化是因为目前我可以获取本机项目 (repo) 并构建我需要的 .so 文件(通过 Maven 构建过程),然后我只需复制该 .so 文件并将其放入我的主要项目本机 libs 文件夹(即 mainProject/src/main/libs/armeabi-v7a/nativeLib.所以)。所以...我的本机项目pom.xml踢出.so文件如下所示(构建区域)
<packaging>so</packaging>
<properties>
<android.ndk.args>V=1 -B NDK_DEBUG=1 -j8</android.ndk.args>
<arch>armeabi-v7a</arch>
<mavenAntrunPluginVersion>1.8</mavenAntrunPluginVersion>
</properties>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav</artifactId>
<version>1.0-beta-2</version>
</extension>
</extensions>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>${mavenAntrunPluginVersion}</version>
<executions>
<execution>
<phase>validate</phase>
<configuration>
<tasks>
<exec
dir="${project.basedir}/src/main/java/com/abc/myClass"
executable="javac"
failonerror="true">
<arg value="myClass.java"/>
</exec>
<exec
dir="${project.basedir}"
executable="javah"
failonerror="true">
<arg value="-d"/>
<arg value="${project.basedir}/target/jni/include"/>
<arg value="-classpath"/>
<arg value="${project.basedir}/src/main/java"/>
<arg value="com.abc.myClass.MyClass"/>
</exec>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.simpligility.maven.plugins</groupId>
<artifactId>android-ndk-maven-plugin</artifactId>
<version>1.0.1-SNAPSHOT</version>
<extensions>true</extensions>
<configuration>
<target>${project.artifactId}</target>
<finalLibraryName>${project.artifactId}</finalLibraryName>
<ndkPath>${android.ndk.path}</ndkPath>
<applicationMakefile>src/main/cpp/Application.mk</applicationMakefile>
<makefile>src/main/cpp/Android.mk</makefile>
<architectures>${arch}</architectures>
<additionalCommandline>${android.ndk.args}</additionalCommandline>
<librariesOutputDirectory>${project.build.directory}/ndk-libs</librariesOutputDirectory>
<objectsOutputDirectory>${project.build.directory}/ndk-obj</objectsOutputDirectory>
<headerFilesDirectives>
<headerFilesDirective>
<directory>${basedir}/src/main/cpp</directory>
<includes>
<include>**\/*.hpp</include>
</includes>
</headerFilesDirective>
</headerFilesDirectives>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
所以这会将 .so 放入 myNativeProject/target/ndk-obj/armeabi-v7a/nativeLib.so 中。然后我通常将其复制到我的主要项目中。我尝试使该项目成为 .so 类型的依赖项,但它无法识别它。如何将其添加到我的主项目中?提前谢谢了。
好的,
所以基本上在 .so 项目中我使用 'build-helper-maven-plugin' 来附加我的 .so 工件。然后在我的主项目中,我使用 'maven-dependency-plugin' 将 .so 文件复制(目标设置为复制)到本机输出目录。如果有人需要更多信息,请发表评论。