gpt4 book ai didi

java - 在android项目中使用maven库

转载 作者:行者123 更新时间:2023-12-02 04:06:13 25 4
gpt4 key购买 nike

我有一个特定的图书馆项目,它执行特定的工作。该库是使用 maven 构建的。

我现在想将此库包含在 Android 项目中。我在 gradle 中添加了库 jar 作为编译依赖项,并且我可以在我的 android 代码中成功使用该库。

我安装了 JDK 8,并使用它构建了库。但是,正如我所读到的,android 使用 Java 7。由于该库是使用 JDK 8 构建的,这会导致问题吗?

如果它会导致问题,我认为使用 JDK 7 构建库也不能解决问题,因为该库依赖于外部 Maven 存储库中的其他 Maven 库。我能做点什么吗?

最佳答案

这是一个常见的 JDK 生命周期问题。好消息是您可以采取一些措施来确保构建中的所有内容都符合特定的 JDK。

首先,请确保您的模块确实是使用您愿意接受的最新 JDK 版本编译的。您可以将编译器插件设置为仅生成符合特定版本的字节码,例如 JDK 7。

例如:

 <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>THE_JDK_VERSION_YOU_WANT</source>
<target>THE_JDK_VERSION_YOU_WANT</target>
</configuration>
</plugin>
</plugins>
</build>

注意

这样做有一个缺点,那就是在设置特定的 source 时和target对于编译器来说,代码可能仍然使用目标环境的 JRE 中不可用的 JDK 功能。例如,设置 JAVA_HOME到 JDK8 和 sourcetarget到 1.7 仍然允许代码使用(例如)ConcurrentHashMap.mappingCount()它出现在 JDK8 中。

这个问题的答案是使用animal-sniffer插入。如果您以这种方式配置,此插件将检查您的代码是否使用了不允许的 API,例如 JDK8。这个插件之前是由 Codehaus 托管的,但如果 Google 一下的话它就会出现。明天我回去工作时可以为您提供一个工作示例。

接下来,正如您所指出的,您有自己的依赖项。幸运的是,enforcer插件可以使用扩展规则集,称为 <enforceBytecodeVersion>它可以检查您的所有依赖项是否也符合特定的字节码版本。所有详情均可查看here .

已编辑

这是 animal-sniffer 的配置插入。有一个较新的版本可用(1.14),但它对我不起作用。也许你会有更好的运气。 JDK 的 API 签名可从 Maven Central 获取。

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-maven-plugin</artifactId>
<version>1.13</version>
<executions>
<execution>
<id>check-for-jdk6-compliance</id>
<phase>test</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<signature>
<groupId>org.codehaus.mojo.signature</groupId>
<artifactId>java16</artifactId>
<version>1.1</version>
</signature>
</configuration>
</plugin>

关于java - 在android项目中使用maven库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34248356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com