![](/img/trans.png)
[英]ActionBar in Android Maven Project using Android Support Library v7
[英]Using maven library in android project
我有一個圖書館項目,可以做一些工作。 該庫是使用maven構建的。
我現在想將此庫包含在android項目中。 我在gradle中將庫jar添加為編譯依賴項,並且可以在我的android代碼中成功使用該庫。
我已經安裝了JDK 8,並使用它來構建庫。 但是,正如我讀過的,android使用Java7。由於該庫是使用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並將source
和target
為1.7仍將允許代碼使用(例如)JDK8中附帶的ConcurrentHashMap.mappingCount()
。
這個問題的答案是使用animal-sniffer
插件。 如果您以這種方式進行配置,此插件將檢查您的代碼中是否有禁止使用的API:s的用法,例如JDK8。 這個插件以前是由Codehaus托管的,但是如果Google稍作改動,它就會出現。 明天上班時,我可以為您提供一個工作示例。
接下來,正如您所指出的,您具有依賴性。 幸運的是, enforcer
插件可以使用擴展的規則集,名為<enforceBytecodeVersion>
可以檢查所有的依賴性也符合特定字節碼的版本。 所有詳細信息都可以在這里找到 。
已編輯
這是animal-sniffer
插件的配置。 有一個更新的版本(1.14),但對我而言不起作用。 也許您會有更好的運氣。 在Maven Central中可以找到JDK的API簽名。
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.