繁体   English   中英

如何将Android库发布到Maven存储库以便轻松使用?

[英]How to publish an Android library to a Maven repository to be used easily?

我使用指南将我的Android库(带有依赖项)发布到AWS S3 maven存储库。

在一个新项目中,我将S3存储桶添加为Maven存储库,如果我将以下内容添加到新项目的build.gradle文件中,我可以成功使用它:

implementation ('com.mydomain:my_library:1.4:release@aar') {
    transitive=true
}

(“transitive = true”是必需的,以便包含库的依赖项。)

但是,我希望其他人能够使用我已经看过很多其他库的简化版本:

implementation 'com.mydomain:my_library:1.4'

当我这样做时,我在代码中得到“无法解决符号”错误,并且(当然)在我尝试构建项目时会出现“不存在”错误。

我的图书馆的POM文件如下所示。 有什么我可以在那里改变所以我可以使用上面的“简化”实现行,或者我还能做些什么呢?

注意:我尝试将“<packaging> pom </ packaging>”替换为“<packaging> aar </ packaging>”,使缓存无效,然后再次运行,但行为完全相同。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mydomain</groupId>
  <artifactId>my_library</artifactId>
  <version>1.4</version>
  <packaging>pom</packaging>
  <dependencies>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>appcompat-v7</artifactId>
      <version>27.1.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.android.support.constraint</groupId>
      <artifactId>constraint-layout</artifactId>
      <version>1.1.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>design</artifactId>
      <version>27.1.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.reactivex.rxjava2</groupId>
      <artifactId>rxandroid</artifactId>
      <version>2.1.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.reactivex.rxjava2</groupId>
      <artifactId>rxjava</artifactId>
      <version>2.2.4</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.github.instacart.truetime-android</groupId>
      <artifactId>library-extension-rx</artifactId>
      <version>3.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.google.dagger</groupId>
      <artifactId>dagger-android</artifactId>
      <version>2.15</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.nostra13.universalimageloader</groupId>
      <artifactId>universal-image-loader</artifactId>
      <version>1.9.5</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.google.firebase</groupId>
      <artifactId>firebase-core</artifactId>
      <version>16.0.6</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.google.firebase</groupId>
      <artifactId>firebase-messaging</artifactId>
      <version>17.3.4</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

如果您的项目恰好托管在Github上,请考虑使用https://jitpack.io/

Jitpack允许您直接从Github轻松发布库以进行gradle。

虽然这个答案没有直接回答你的问题,但确实提供了一个有效且简单的替代方案。

我有完全相同的问题! 并问了同样的问题,你可以在这里看到我的问题。 我的问题是答案中的解释和分享给我的帖子不够清楚(或者我可能无法正确理解它们)......但是! 然后我发现这个超级有用的帖子感谢AndroidWeekly,我按照那篇文章中的步骤然后我能够将我的库发布到maven,你可以在这里检查我的库😃你可以使用这个将它添加到你的项目中:

implementation 'com.codesgood:justifiedtextview:1.1.0'

只是你希望通过gradle提供你的方式。 如果您需要一些帮助来完成该帖子的步骤,请告诉我,我很乐意帮助🙂

如果您使用maven构建库,则需要添加maven android插件。 这样您就可以将其打包为AAR文件。 在这种情况下,根据我的经验,编译范围不会将库的依赖项扩展到路径中,您仍然需要添加transitive = true标志。

插件网站: https//simpligility.github.io/android-maven-plugin/plugin-info.html

示例POM: https//github.com/fcopardo/EasyRest/blob/master/pom.xml

现在,如果您使用gradle创建库,则需要了解gradle如何打包依赖项。 有两种方法:

实现:通过使用这个词,依赖关系保存在库的路径中。 它不会暴露在消费者的道路上。 因此,如果需要定位库的依赖项,则使用者项目将失败。 例如,如果要返回RxAndroid observable,则编译将失败,因为编译器将无法找到返回方法签名中提到的RxAndroid类。 另一方面,如果库的依赖关系仅在内部使用(例如,您使用改进构建rest模块并在返回签名中仅公开RxJava),则可以进行编译。

api:与实现完全相反。 标记为api的依赖关系将渗透到使用者的路径中,因此,每次暴露其中一个依赖关系时都必须使用它。 使用与以前相同的示例,您应该使用api导入RxAndroid,并使用实现进行改造。 这应该允许您使用库而不需要任何额外的导入或标志。

请记住,maven android插件支持自版本4以来的gradle项目格式,因此您可以同时拥有POM文件和.gradle文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM