簡體   English   中英

在Android項目中使用Maven庫

[英]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>

注意

這有一個缺點,那就是在為編譯器設置特定的sourcetarget ,代碼可能仍會使用目標環境的JRE中不可用的JDK功能。 例如,將JAVA_HOME為JDK8並將sourcetarget為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM