java - 为什么我无法从本地存储库导入 Maven jar?

标签 java maven

demo1项目是一个springboot项目,demo项目也是一个springboot项目。 我在demo1中写了一个Java类Test.java:

package com.example.demo1;
public class Test {
    public void test() {
        System.out.println("11111111111111");
    }
}

并将其安装到本地 Maven 存储库:

mvn install:install-file "-DgroupId=com.example" "-DartifactId=demo1" "-Dversion=0.0.1-SNAPSHOT" "-Dpackaging=jar" "-Dfile=target/demo1-0.0.1-SNAPSHOT.jar"

在demo项目中,我建立demo1项目的依赖,内容为 pom.xml:

<dependency>
        <groupId>com.example</groupId>
        <artifactId>demo1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
</dependency>

当我构建演示项目时,发生了错误:

mvn clean package

错误消息在这里:

com.example.demo1 does not exists
Test cannot find symbol!

最佳答案

您可能正在使用 spring-boot-maven-plugin 创建可运行的 Spring Boot 应用程序 Artifact 。该插件创建了一个确实具有扩展名 *.jar 的 Artifact ,但实际上它根本不是一个 jar:它具有 BOOT-INF/lib 中的所有依赖项,它在 list 中使用特殊条目,并且很快。 Java(JVM)无法读取这个jar,Spring Boot应用程序使用一个特殊的类加载器来读取这个结构,这对于Spring Boot应用程序来说是相当独特的。

如果您想了解我在说什么 - 只需使用 WinRAR/WinZIP 或其他工具打开 Spring Boot 应用程序的 JAR,您就会自己看到它。

这就是为什么一般来说你不能真正依赖 Spring Boot 应用程序。

话虽如此,现在有一些解决方法:

  1. 很可能您并不真正需要依赖于整个应用程序,而是依赖于一些“通用”代码 - 在这种情况下,请考虑将其重构为单独的模块,并使两个应用程序都依赖于此模块。

  2. 使用This link对于 Maven 中插件配置级别的解决方法,您最终会得到可能实现您想要的功能的额外 jar。

关于java - 为什么我无法从本地存储库导入 Maven jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60482813/

相关文章:

java - 在 HSSFWorkbook 中设置 Activity 单元格

java - 无法在 IntelliJ 上为我的 Maven 项目使用 lagom

maven - 使用 Maven Shade 插件创建可执行 JAR

java - Mule - 使用 Maven 运行时项目构建失败

java - 在 tomcat 7/maven 嵌入式 tomcat 上运行 Spring 3.1 webapp

Java 版本 - Maven - 类路径?

java - 将 ScrollPane 添加到 JTextArea

java - 多个 QueueConnectionFactory 上的异常

java - Java 中的 AWT 为 "Reload Image 10 sec after successful loading"

java - 使用 ORM 将对象持久化到数据库