如何将充满工件的目录上传到GitHub软件包?

问题描述

执行摘要 如果可能的话,我想将一个充满文件的目录上传到“ GitHub软件包”中。不是GitHub的“存储库”,而是here中描述的“ Github软件包”。不幸的是,文档没有告诉您如何执行此操作。它仅告诉您如何使用JavaScript,Ruby,Java和.NET的构建工具上传构建工件。

我为什么要这样做?我在下面立即回答。尽管如果还有使用Maven的简单解决方案,那么Maven也将为我工作:

我们希望从本地托管的Nexus工件存储库迁移到GitHub软件包,以使我们的构建工件(例如jar文件)可供我们开发团队中的所有人使用。

我们使用的编程语言是Scala,这是一种以JVM为目标的语言,因此它被设计为与Java生态系统在很大程度上进行互操作。但是,对于管理版本,我们使用sbt而不是Maven。 Sbt是标准的Scala构建工具。

一个用于sbt的插件(称为sbt-github-packages),实际上非常有用。它使我们只需键入“ sbt publish”即可轻松地将Scala jar文件等发布到GitHub。

但是,我们尚未解决的问题是将第三方工件(例如Oracle的jdbc驱动程序)上载到GitHub软件包。对于大多数第三方工件而言,这不是问题,因为它们大多数都存储在公共可用的Maven或Ivy工件存储库中,并且sbt会根据需要自动获取它们。

不幸的是,Oracle没有以这种标准方式提供其jdbc驱动程序。还有其他一些我们不需要使用的工件,这些工件不在公共工件存储库中。当前,我们通过将它们上传到我们本地托管的Nexus工件存储库中来解决此问题。

GitHub上有关将工件发布到GitHub程序包的说明只说cd到您的Java源代码Git repo中,然后键入“ mvn deploy”。 (您必须先将一些配置材料添加到pom文件中,但这很容易。)但是这些说明旨在用于编译Java源代码,然后将已编译的工件发布到GitHub包中。它们不是完整的说明,它们告诉您如何处理没有源代码的情况,而只有预先构建的工件。

我敢肯定,如果我对Maven的理解很好,我可能会想出如何进行这项工作的方法,但是我对Maven的了解非常少。如上所述,我们改为使用sbt。

我确实有一些需要工作的地方,但这并不完全正确。我创建了一个目录,其中包含所有Oracle的ojdbc7工件。我做了一个从ojdbc7-12.1.0.2.pom到pom.xml的符号链接,然后运行了“ mvn deploy”。此 did 将ojdbc7-12.1.0.2.jar和ojdbc7-12.1.0.2.pom上传到了GitHub软件包,但未上传其他工件。例如,它没有上传ojdbc7-12.1.0.2-javadoc.jar。

此外,如果此目录中有一个代码jar,我确定它也不会被上传

如果有人知道我需要执行什么操作才能将ojdbc7目录中的所有工件发布到GitHub软件包,我将非常感激。

解决方法

Oracle JDBC驱动程序已在Central Maven中提供。您应该使用Central Maven。 请参阅此https://developer.mozilla.org/en-US/docs/Web/CSS/right上的说明。

下面的GAV将获得JDBC驱动程序以及所有其他免费的jar。

<groupId>com.oracle.database.jdbc<groupId>
<artifactId>ojdbc8-production</artifactId>
<version>19.7.0.0</version>
,

正如Nirmala在此处的另一个答案中所提到的,对于Oracle jdbc工件,我试图做的事情可能不再是必需的。 (我还没有尝试过他的答案,看它是否对我们有用。)但是,我们可能希望将其他第三方工件放入GitHub软件包中。我已经弄清楚了如何做到这一点。这是我将ojdbb7 javadoc工件上传到GitHub软件包的示例:

$ mvn org.apache.maven.plugins:maven-deploy-plugin:3.0.0-M1:deploy-file \
     -DpomFile=pom.xml \
     -Dfile=ojdbc7-12.1.0.2.jar \
     -Dfiles=ojdbc7-12.1.0.2-javadoc.jar \
     -Dclassifiers=javadoc \
     -Dtypes=jar \
     -Durl=https://maven.pkg.github.com/myCompany/myRepo \
     -DrepositoryId=github

-Dfiles除包含目标代码工件外,还可以包含您要上传的文件的逗号分隔列表。

-Dclassifiers是用逗号分隔的列表,例如“ javadoc”和“ sources”等。您需要为-Dfiles中包含的每个工件指定一个。

-Dtypes是包含在上载中的所有文件扩展名的逗号分隔列表。 (“ pom.xml”除外。)在这种情况下,我们仅上传jar文件(和“ pom.xml”),因此我们只需要指定“ jar”即可。

-Durl指定要上传到的存储库。它必须以“ https://maven.pkg.github.com”开头。

-DrepositoryId必须是“ github”。

在查看我提供的Maven命令行时,自然会想到org.apache.maven.plugins:maven-deploy-plugin:3.0.0-M1:deploy-file发生了什么。有人认为您可以安全地使用更合理的调用deploy:deploy-file

不幸的是,如果您没有像我上面那样指定插件版本,最终会得到一个旧版本的插件,它无法正常工作。 (至少在我撰写本文时还没有。)