本地 Maven 回购没有符号
Local Maven Repo have no Symbols
我创建了一个本地 Maven Repo 并在那里部署了一个自己的库:
与:
mvn clean package install deploy
在:
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
<groupId>de.example</groupId>
<artifactId>example-lib</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>example-lib</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>example.repo</id>
<name>example internal mvn repository</name>
<url>file://${project.basedir}/../mvn-repo</url>
</repository>
</distributionManagement>
现在另一个项目使用它:
<repositories>
<repository>
<id>example.repo</id>
<url>file://${project.basedir}/../mvn-repo</url>
</repository>
</repositories>
...
<dependency>
<groupId>de.example</groupId>
<artifactId>example-lib</artifactId>
<version>0.0.1</version>
</dependency>
...
但是在编译项目时,lib 中的所有符号都丢失了(但依赖关系已解决,并且 .jar 文件在那里)
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/gregor/Documents/dev/repo/example/core/src/main/java/de/example/core/CoreApplication.java:[11,31] package de.example.examplelib does not exist
[ERROR] /C:/Users/gregor/Documents/dev/repo/example/core/src/main/java/de/example/core/DbExampleService.java:[11,42] package de.example.examplelib.db.example does not exist
[ERROR] /C:/Users/gregor/Documents/dev/repo/example/core/src/main/java/de/example/core/DbExampleService.java:[12,42] package de.example.examplelib.db.example does not exist
[ERROR] /C:/Users/gregor/Documents/dev/repo/example/core/src/main/java/de/example/core/DbExampleService.java:[19,17] cannot find symbol
symbol: class UserRepository
location: class de.example.core.DbExampleService
[ERROR] /C:/Users/gregor/Documents/dev/repo/example/core/src/main/java/de/example/core/DbExampleService.java:[35,39] cannot find symbol
symbol: class User
location: class de.example.core.DbExampleService
我搜索了最后 4 个小时,也许我只是遗漏了一些基本的东西??
打开提示。提前致谢。
当 Maven 找不到依赖项时,它会明确说明。
您的问题性质不同;看起来你的 jar 可能实际上是空的(即你有正确的依赖关系;它只是没有正确打包)。
Maven 存储库只是一个简单的文件集合;你可以进去打开你的罐子;我建议检查您的 mvn-repo 以查看您包含的 jar 是否包含您希望包含的 classes。
如果我是对的(即你的 jar 没有正确打包)查看默认的 maven 目录结构等(Maven 用于默认从 src/main/java
中获取 java
文件; 也许您使用了不同的源文件夹并且没有将此告诉 Maven?)
编辑 1 总结评论中的讨论和其他答案:
到目前为止,我们知道您的 jar 打包错误。好吧,为了被其他项目使用,它被错误地打包了。因此,您看到的错误是正常的。准确地说,错误是因为您指的是 class
例如 de/example/examplelib/db/example/User.class
,但是这个 class 位于错误的位置(de
包应该在 jar 的根目录中,而不是在 BOOT-INF/classes
文件夹中)。
最有可能的是,发生这种情况是因为您用来打包库的 pom.xml
文件继承自 spring-boot 父级(或者您在其中有一些其他配置没有显示)。
因此,鉴于这些事情,您需要重新陈述您的问题:
- 您希望您的 library-jar 成为 spring-boot 可执行 jar 吗?如果是,那么我帮不了你,因为我不太了解spring-boot,而且我不知道你是否可以有一个既可执行又可执行的spring-boot jar图书馆。如果不是,则需要将 spring-boot 作为父项删除并重新打包。
- 您是否打算将您的第二个项目设为 spring-boot 可执行文件?如果是,那么您需要添加您在 lib 项目中的父项。
我创建了一个本地 Maven Repo 并在那里部署了一个自己的库: 与:
mvn clean package install deploy
在:
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0
<groupId>de.example</groupId>
<artifactId>example-lib</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>example-lib</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>example.repo</id>
<name>example internal mvn repository</name>
<url>file://${project.basedir}/../mvn-repo</url>
</repository>
</distributionManagement>
现在另一个项目使用它:
<repositories>
<repository>
<id>example.repo</id>
<url>file://${project.basedir}/../mvn-repo</url>
</repository>
</repositories>
...
<dependency>
<groupId>de.example</groupId>
<artifactId>example-lib</artifactId>
<version>0.0.1</version>
</dependency>
...
但是在编译项目时,lib 中的所有符号都丢失了(但依赖关系已解决,并且 .jar 文件在那里)
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/gregor/Documents/dev/repo/example/core/src/main/java/de/example/core/CoreApplication.java:[11,31] package de.example.examplelib does not exist
[ERROR] /C:/Users/gregor/Documents/dev/repo/example/core/src/main/java/de/example/core/DbExampleService.java:[11,42] package de.example.examplelib.db.example does not exist
[ERROR] /C:/Users/gregor/Documents/dev/repo/example/core/src/main/java/de/example/core/DbExampleService.java:[12,42] package de.example.examplelib.db.example does not exist
[ERROR] /C:/Users/gregor/Documents/dev/repo/example/core/src/main/java/de/example/core/DbExampleService.java:[19,17] cannot find symbol
symbol: class UserRepository
location: class de.example.core.DbExampleService
[ERROR] /C:/Users/gregor/Documents/dev/repo/example/core/src/main/java/de/example/core/DbExampleService.java:[35,39] cannot find symbol
symbol: class User
location: class de.example.core.DbExampleService
我搜索了最后 4 个小时,也许我只是遗漏了一些基本的东西?? 打开提示。提前致谢。
当 Maven 找不到依赖项时,它会明确说明。 您的问题性质不同;看起来你的 jar 可能实际上是空的(即你有正确的依赖关系;它只是没有正确打包)。
Maven 存储库只是一个简单的文件集合;你可以进去打开你的罐子;我建议检查您的 mvn-repo 以查看您包含的 jar 是否包含您希望包含的 classes。
如果我是对的(即你的 jar 没有正确打包)查看默认的 maven 目录结构等(Maven 用于默认从 src/main/java
中获取 java
文件; 也许您使用了不同的源文件夹并且没有将此告诉 Maven?)
编辑 1 总结评论中的讨论和其他答案:
到目前为止,我们知道您的 jar 打包错误。好吧,为了被其他项目使用,它被错误地打包了。因此,您看到的错误是正常的。准确地说,错误是因为您指的是 class
例如 de/example/examplelib/db/example/User.class
,但是这个 class 位于错误的位置(de
包应该在 jar 的根目录中,而不是在 BOOT-INF/classes
文件夹中)。
最有可能的是,发生这种情况是因为您用来打包库的 pom.xml
文件继承自 spring-boot 父级(或者您在其中有一些其他配置没有显示)。
因此,鉴于这些事情,您需要重新陈述您的问题:
- 您希望您的 library-jar 成为 spring-boot 可执行 jar 吗?如果是,那么我帮不了你,因为我不太了解spring-boot,而且我不知道你是否可以有一个既可执行又可执行的spring-boot jar图书馆。如果不是,则需要将 spring-boot 作为父项删除并重新打包。
- 您是否打算将您的第二个项目设为 spring-boot 可执行文件?如果是,那么您需要添加您在 lib 项目中的父项。