0

我创建了一个本地 Maven 存储库并在那里部署了一个自己的库:使用:

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 个小时,也许我只是错过了一些基本的东西?打开提示。提前致谢。

4

1 回答 1

0

当 Maven 找不到依赖项时,它会明确说明。您的问题具有不同的性质;看起来你的 jar 可能实际上是空的(即你有正确的依赖关系;它只是没有正确打包)。

Maven 存储库只是一个简单的文件集合;你可以进去打开你的罐子;我建议检查您的 mvn-repo 以查看您包含的 jar 是否包含您希望包含的类。

如果我是对的(即您的 jar 未正确打包),请查看默认的 maven 目录结构等(默认情况下,Maven用于javasrc/main/java给马文?)

编辑 1总结评论和其他答案中的讨论:

到目前为止,我们知道您的 jar 包装不正确。好吧,为了被其他项目消费,它被错误地打包了。因此,您看到的错误是正常的。准时,错误是因为您引用了该类 de/example/examplelib/db/example/User.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 项目中的父级。
于 2017-06-08T18:12:10.380 回答