如何使用 Jenkins 为相同的源代码构建 .jar 和 .aar 人工制品
Posted
技术标签:
【中文标题】如何使用 Jenkins 为相同的源代码构建 .jar 和 .aar 人工制品【英文标题】:How to build .jar and .aar artefact for the same source code using Jenkins 【发布时间】:2016-11-13 03:03:50 【问题描述】:我目前在 Jenkins 中配置了一个项目(项目 A),它构建了一个 .jar 人工制品,并由 Web 服务项目(项目 B)使用。这个项目(Project A)由公共库文件组成;基于 android 的应用程序(项目 C)也使用这些文件。
问题:我无法在(项目C)中使用(项目A)内置的jar; Reason (Project C) 是使用 Android 工具构建的,而 (Project A) 是使用 eclipse spring 工具构建的,并且由 (Project B) 使用,后者也是使用 spring 工具构建的。文件夹结构和 build.scripts 不同!!!
我尝试过的:我使用 Android Studio 使用(项目 A)中的源文件创建了一个新的库项目(项目 D),管理生成一个 .aar 文件并将这个模块添加为我的android项目(项目C)中的依赖项。这行得通!
问题:
如何使用 Jenkins 实现上述功能,即 我的常用库文件的单一源存储库应该用于构建 .jar,如(项目 A ) 以及 Jenkins 中的 .aar (项目 D)?非常感谢具有构建自动化专业知识的人可以分享构建步骤以实现相同目标。
编辑 1: 是否有一个通用的文件夹结构可以用来构建 .jar 和 .aar 文件,我可以分别在 eclipse 和 android studio 中使用它们?
更新 1: 我设法在 git 中为我的公共库项目(项目 A)创建了一个基于 Android 的文件夹结构(与之前基于 eclipse 的结构相比)的单一存储库;并且还生成了一个在项目 B 和 C 中都可用的 .jar 工件,并对项目 B 和 C 中的 .gradle 文件进行了一些修改!仍在开发 Jenkins 自动化部分...
我还了解到 (Project A) 和 (Project D) 的构建脚本 (build.gradle) 发生了变化;是否可以通过保留单个源存储库来指定 Jenkins 为特定项目使用特定的构建脚本? (项目 A 的 gradle.build-A 和项目 D 的 gradle.build-D) 任何实现相同目标的指针也会有所帮助。
提前致谢,
【问题讨论】:
【参考方案1】:我不确定我的理解是否正确,但是:
如果您使用您的 jenkins 构建 .jar
并将其部署到您的 Nexus,它应该可以像任何其他依赖项一样从您的 Android Studio 项目中访问。您需要注意的是,您的build.gradle
(在项目级别)将 Nexus 配置为存储库(我相信默认是 jCenter())。
如果你不运行 Nexus 或 Artifactory 或类似的东西,我猜你只是将你的 jar 放在 lib 文件夹中。您仍然可以使用您的 jar 来执行此操作。
Android ARchives (.aar
) 很像 .jar
,但它们考虑了一些特殊资源,而普通的 .jar
则没有(例如清单)。
如果您的项目 A 中的库是普通的旧 Java,我认为这不应该工作(可能是某种 JDK 版本差异),只需像任何其他依赖项一样包含它。
Android 与其他 Java 项目之间确实存在差异。
Android 使用 android-gradle 进行构建,通常您使用 Maven 构建 Java 应用程序。
从 Maven 构建的 .jar
绝对可以在 android-gradle 应用程序中使用,我经常这样做。
【讨论】:
您是对的,JDK 版本存在差异,而且(项目 A)不是普通的旧 Java 项目。我成功地通过 .aar 添加了模块依赖;但是 .jar 存在一些瓶颈! 就像我说的,这应该作为 jar 很好地工作。您可能需要详细说明您的瓶颈。 我把它修好了!我刚刚在 android studio 中将公共库 .jar(项目 A)构建为 java 库项目 with all dependencies,这个 jar 现在可用于 spring tools IDE 和 Android studio IDE 项目。瓶颈与其他依赖项和 JDK 不匹配有关。现在,我想通了,谢谢!以上是关于如何使用 Jenkins 为相同的源代码构建 .jar 和 .aar 人工制品的主要内容,如果未能解决你的问题,请参考以下文章