本地Maven Repo没有符号

时间:2017-06-08 17:43:37

标签: java eclipse maven maven-dependency

我创建了一个本地Maven Repo并在那里部署了一个自己的lib: 用:

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

1 个答案:

答案 0 :(得分:0)

当Maven无法找到依赖关系时,它明确地这样说。 你的问题是不同的;看来你的jar实际上可能是空的(即你有正确的依赖;它只是没有正确打包)。

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

如果我是对的(即你的jar没有正确打包),请查看默认的maven目录结构等(Maven用于默认从java获取src/main/java个文件;也许你使用不同的源文件夹,而你没有告诉Maven?)

编辑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作为父级并重新打包它。
  • 您是否打算将第二个项目作为弹簧启动可执行文件?如果是,那么您需要在lib项目中添加父项。