我的一个项目中有编译错误
无法执行目标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
只需从另一个项目创建一个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>
希望这会对你有所帮助。祝好运!!!
正如您在评论中所述,您正在与您正在尝试构建的项目相同的laberint-core
工作区中开发Eclipse
项目。您遇到的问题是,虽然Eclipse
知道您工作区中的每个项目并且可以解决这些项目依赖项,但Maven
没有此信息,这意味着它会搜索存储库(您在~/.m2
和Maven Central
中的本地项目)的依赖项。
如您所说,您已经通过laberint-core
将Maven
项目安装到您当地的mvn install
存储库。这就是为什么Maven
可以找到依赖项并且你没有获得dependency could not be resolved
异常,但我猜你之前安装了依赖项,所以你在安装后在Eclipse
项目中创建的一些类缺失了。
有两种方法可以解决此问题
jar
这意味着在构建主项目时会有一些更多的手动开销,但如果您只在Eclipse
中构建而不是直接从命令行构建,则可以自动化。
这基本上是第三个项目,只包含一个看起来像这样的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应该位于其模块的父目录中。