我有两个独立的Maven项目。
项目A包含实用程序类和类似的东西。它还在某些界面中使用jetbrains批注将参数标记为Nullable和NotNullable。
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>20.1.0</version>
</dependency>
项目B使用项目A的某些实用程序。它作为我存储库中的依赖项包括在内。
<dependency>
<groupId>org.test.group</groupId>
<artifactId>Utilities</artifactId>
<version>1.0</version>
</dependency>
我可以从我的实用程序依赖项中访问类。但是我看不到参数上的任何注释。我也无法在我在那里的任何课程中访问项目B中的jetbrains注释。我也必须在项目B中添加jetbrains依赖项。
是否可以继承其他依赖项的依赖项?
我查看了其他问题,发现了this similar one。他的解决方案是将可选参数设置为false,我什至没有使用。也许还需要在Maven构建中进行配置?当前,我正在使用目标clean package deploy
运行我的构建,而没有任何特殊的附加配置。
我知道gradle构建允许implementation
和api
依赖关系,其中一个将依赖关系转发给其他包含该依赖关系的项目,而另一个则不。
编辑:这里是我项目的完整配置
在包含我的工件的localhost:8081下运行的本地关系。在localhost:8080下运行的本地TeamCity用于构建和部署到存储库。
项目A pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.test.group</groupId>
<artifactId>Utilities</artifactId>
<version>1.0</version>
<name>Utilities</name>
<dependencies>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>20.1.0</version>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<distributionManagement>
<repository>
<id>local_nexus</id>
<name>Deployment</name>
<url>http://localhost:8081/repository/org.test.group/</url>
</repository>
</distributionManagement>
</project>
项目B pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.test.group</groupId>
<artifactId>TestProject</artifactId>
<version>1.0</version>
<name>TestProject</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.test.group</groupId>
<artifactId>Utilities</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>local_nexus</id>
<name>Deployment</name>
<url>http://localhost:8081/repository/org.test.group/</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>local_nexus</id>
<name>Deployment</name>
<url>http://localhost:8081/repository/org.test.group/</url>
</repository>
</distributionManagement>
</project>
编辑2:
我已经取得了一些进展。由于添加注释后我没有更改Project A的版本,因此我的本地存储库未获取新版本。使用mvn dependency:purge-local-repository
清除后,可以使用1.0版的更新状态。
mvn dependency:tree
立即打印
[INFO] org.test.TestProject:jar:1.0
[INFO] \- org.test:Utilities:jar:1.0:compile
[INFO] \- org.jetbrains:annotations:jar:20.1.0:compile
我的IDE(Intellij)仍然无法识别TestProject中的注释类。知道为什么现在失败了吗?
答案 0 :(得分:1)
您自动继承了annotations
,不需要进行配置。
如果它属于范围provided
,则您不会继承它。查看mvn dependency:tree
,以了解annotations
库的位置和范围。
顺便说一句:mvn clean package deploy
是浪费时间,只需使用mvn clean deploy
。
答案 1 :(得分:0)
问题是由我的本地Maven存储库引起的。由于我没有更改Project A工件的版本(始终为1.0),所以我的本地存储库一直为我提供1.0版的旧状态。
使用mvn dependency:purge-local-repository
,我可以清理旧的1.0并加载新的1.0。我的IDE仍然拒绝导入annotations
依赖项。此时,它已被mvn dependency:tree
列出。
经过一段时间的IDE调试后,我决定将版本更新为1.1。一旦构建了Project A的1.1,并且将Project B的依赖项更新为1.1,就可以使用。
因此,基本上,这是由于我的项目版本控制不佳造成的,这干扰了我的本地Maven存储库。