与maven编译错误

问题描述 投票:0回答:2

我的一个项目中有编译错误

无法执行目标org.apache.maven.plugins:maven-compiler-plugin:3.1:compile

因为它找不到我已经包含的其他项目的所有类

 <dependency>
            <groupId>com.laberint</groupId>
            <artifactId>laberint-core</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

我没有Eclipse的任何编译问题。我已经删除了所有存储库。

错误是因为缺少的类都在laberint-core工件中。我已经删除了整个存储库文件夹

我也安装了jar

mvn install:install-file -Dfile=laberint-core-0.0.1-SNAPSHOT.jar -DgroupId=com.laberint -DartifactId=laberint-core -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar
java spring maven spring-mvc spring-boot
2个回答
1
投票

只需从另一个项目创建一个jar并将其添加到当前项目的本地lib目录中。另一个选择是将jar文件安装到您当地的maven存储库中,如下所示: -

 mvn install:yourlocal-jarfile
-Dfile=<path-to-your jar>
-DgroupId=<group-id> --> the group that the file should be registered under
-DartifactId=<artifact-id>  --> give a artifact name to your jar
-Dversion=<version>  --> version of your jar file
-Dpackaging=<packaging> --> jar
-DgeneratePom=true

您也可以尝试以下选项: -

    <dependency>
        <groupId>com.laberint</groupId>
        <artifactId>laberint-core</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <systemPath>/pathto/yourJar.jar</systemPath>
    </dependency>    

希望这会对你有所帮助。祝好运!!!


0
投票

正如您在评论中所述,您正在与您正在尝试构建的项目相同的laberint-core工作区中开发Eclipse项目。您遇到的问题是,虽然Eclipse知道您工作区中的每个项目并且可以解决这些项目依赖项,但Maven没有此信息,这意味着它会搜索存储库(您在~/.m2Maven Central中的本地项目)的依赖项。

如您所说,您已经通过laberint-coreMaven项目安装到您当地的mvn install存储库。这就是为什么Maven可以找到依赖项并且你没有获得dependency could not be resolved异常,但我猜你之前安装了依赖项,所以你在安装后在Eclipse项目中创建的一些类缺失了。

有两种方法可以解决此问题

  1. 每次构建主项目之前,都要创建并安装依赖项jar

这意味着在构建主项目时会有一些更多的手动开销,但如果您只在Eclipse中构建而不是直接从命令行构建,则可以自动化。

  1. 创建一个聚合器项目,如图所示here

这基本上是第三个项目,只包含一个看起来像这样的pom.xml文件:

<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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.laberint</groupId>
  <artifactId>aggregator</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
    <module>relative/path/to/laberint-core</module>
    <module>relative/path/to/laberint-main</module>
  </modules>
</project>

要构建项目,您将在聚合器项目之前调用您在主项目上调用的目标。基本上,如果您之前从主项目的根目录调用mvn package,您现在将更改为聚合器项目的根目录并调用mvn package。按照惯例,聚合器pom应该位于其模块的父目录中。

© www.soinside.com 2019 - 2024. All rights reserved.