【问题标题】:How do I Import a user created package in Java?如何在 Java 中导入用户创建的包?
【发布时间】:2020-07-02 00:12:16
【问题描述】:

我最近在 Github 的包注册表上托管了一个 Maven 包,现在我正在尝试使用它。该包旨在提供各种应用程序使用的数据模型,允许我的团队对数据模型包进行更改,而不是更新共享它们的所有 Spring 应用程序中的模型。

我将依赖项放在需要数据模型包的应用程序的pom.xml 文件中,然后运行mvn install(我还必须修改我的 .m2/settings.xml 文件才能访问存储库)。我的印象是该软件包已安装,因为它记录了成功并显示在我的 IDE 的 maven 插件依赖项列表中。

现在我被困住了。到目前为止,我认为一旦安装了包,我就可以导入我需要的类,就像我一直使用 Maven 包一样。但是当我尝试这样做时,我的 IDE 找不到包。

我又开始查看数据模型包,想知道是否需要提供一些额外的元数据。具体来说,我想我可能需要提供一些模块描述符,但我不能确定这是否真的能让我更接近能够使用该包。

这是数据模型包的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.companyname</groupId>
    <artifactId>data-model</artifactId>
    <version>0.0.2-SNAPSHOT</version>

    <name>Data-Model</name>

    <properties>
        <java.version>11</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.1.5.RELEASE</version>
        </dependency>
    </dependencies>
</project>

当我使用 Gradle 发布包时,我会得到以下日志输出:

11:05:23 AM: Executing task 'publishGprPublicationToGitHubPackagesRepository'...

Starting Gradle Daemon...
Gradle Daemon started in 1 s 63 ms
> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :bootJar UP-TO-DATE
> Task :generateMetadataFileForGprPublication
> Task :generatePomFileForGprPublication
> Task :publishGprPublicationToGitHubPackagesRepository

BUILD SUCCESSFUL in 16s
6 actionable tasks: 3 executed, 3 up-to-date
11:05:39 AM: Task execution finished 'publishGprPublicationToGitHubPackagesRepository'.

我运行mvn install时打印的日志很长,所以我不会发布它,但它不会产生任何错误,我可以看到它下载了datamodel jar并成功构建。它还显示在项目目录的外部库列表中。

数据模型的组 ID 与我想在其中使用它的应用程序的组 ID 相同(我的公司名称)。当我输入import com.companyname. 时,它会建议一些本地包,但无法识别数据模型。当我将鼠标悬停在红色文本上时,工具提示会显示 Cannot resolve symbol 'datamodel'

我现在需要做什么才能让我的应用程序从我创建的 maven 包中导入类?

【问题讨论】:

  • 模型的模块是模块化的吗?(已经有module-info.java)。另外,安装是指mvn install吗?您不需要部署要共享的工件吗?在您自己的机器上,您看到了什么错误以及您如何访问模型的依赖项?
  • 该模块在我第一次发布时没有module-info.java 文件,到现在仍然没有。我相信神器已经部署了?是的,我使用了mvn install ~ 就错误而言,我本身并没有收到错误,但是当我在文件顶部键入 import com.companyname.datamodel 时,我想将依赖项导入它并没有找到类。
  • 至于部署工件,我所做的只是将它发布到 GitHub 包注册表,不确定您是否是这个意思。
  • 我已经编辑了我的问题以包含pom.xml,如果没有指定包装,我理解它将默认为一个罐子。

标签: maven gradle maven-3 github-package-registry java-package


【解决方案1】:

终于想通了。

稍微调整一下包的 gradle.properties 并添加

<distributionManagement>
   <repository>
     <id>github</id>
     <name>GitHub OWNER Apache Maven Packages</name>
     <url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
   </repository>
</distributionManagement>

到 pom.xml,我仍然无法成功地将依赖项添加到 Maven,尽管我可以在列表中看到它。我最终做了什么来修复它似乎是与 IDE 相关的一个可能的错误,但我不能肯定地说。我已经尝试过使缓存失效和重新启动 IDE、Maven 清理然后运行安装的各种组合,但在我从 pom.xml 中删除依赖项、运行全新安装然后添加它之后,终于能够让包正常工作再次运行安装一次。

更新:由于某种原因,它再次损坏,为了再次访问包类以进行导入,我不得不(从包中)运行mvn clean,然后运行mvn deploy,然后,从依赖应用程序,执行上面列出的相同步骤并从 pom.xml 中删除依赖项,然后重新运行 mvn install

这似乎是一个很大的痛苦,而且很可能(如果这不是 IntelliJ 中的错误)我做错了什么。

最近,我只需执行以下操作即可在依赖应用程序中看到包的更新:

  1. 在数据模型包中,运行mvn clean,然后运行mvn deploy
  2. 在依赖的应用程序中,运行mvn install

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2012-06-04
    • 2011-12-23
    • 2014-12-17
    • 2013-03-23
    相关资源
    最近更新 更多