我使用的是一个Maven依赖项,它需要设置一个远程存储库。在同一个项目中,我使用自定义构建的JAR,并尝试将其作为依赖项添加。问题是,我收到错误,说Maven无法在远程存储库中找到我的自定义JAR。
在POM中,我有多个依赖项,包括自定义构建的依赖项和需要远程存储库的依赖项(合流)。我已经尝试将我的自定义依赖放在POM中的第一位,但这并没有帮助。我试着从POM中移除存储库,并且我没有得到关于我的自定义构建依赖项的错误,但是我得到了一个远程依赖项的错误。
我正在Maven Docker容器中运行代码。我尝试使用Bash运行Docker容器,不使用Maven命令,然后在容器中手动运行Maven命令,手动检查~/.m2/repository并确认我的自定义构建的JAR就在里面。
运行一个交互式Maven容器:
docker run -it --rm --name ProcessedObsGen -v "$(pwd)":/usr/src/mymaven \
-w /usr/src/mymaven maven:3.3-jdk-8 /bin/bash在码头货柜内:
mvn clean install:install-file \
-Dfile=/usr/src/mymaven/libs/daas-utilities-0.0.1-SNAPSHOT.jar \
-DgroupId=atlas -DartifactId=daas-utilities -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar
mvn exec:java -Dexec.mainClass="atlas.processed_obs_generator.App"
ls ~/.m2/repositorypom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>atlas</groupId>
<artifactId>processed-obs-generator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>processed-obs-generator</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.10.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>atlas.daas-utilities</groupId>
<artifactId>daas-utilities</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-avro-serializer</artifactId>
<version>5.0.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>confluent</id>
<url>https://packages.confluent.io/maven/</url>
</repository>
</repositories>
</project>我使用以下命令作为Docker容器运行代码:
docker run -it --rm --name ProcessedObsGen -v "$(pwd)":/usr/src/mymaven \
-w /usr/src/mymaven maven:3.3-jdk-8 mvn clean install:install-file \
-Dfile=/usr/src/mymaven/libs/daas-utilities-0.0.1-SNAPSHOT.jar \
-DgroupId=atlas -DartifactId=daas-utilities -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar; \
mvn exec:java -Dexec.mainClass="atlas.processed_obs_generator.App"我知道错误:
未能在项目处理- atlas:processed-obs-generator:jar:0.0.1-SNAPSHOT:-生成器上执行目标:无法解决项目atlas.daas-utilities:daas-utilities:jar:0.0.1-SNAPSHOT的依赖关系,无法找到汇流中的工件atlas.daas-utilities:daas-utilities:jar:0.0.1-SNAPSHOT (https://packages.confluent.io/maven/)
我还尝试下载汇流jar,将它放在我放置自定义jar的相同位置,以相同的方式安装它,并从pom中移除远程存储库。然后,我就会看到我使用的聚合类的错误,即ClassNotFoundException。
发布于 2019-07-26 17:13:58
我解决了这个问题。
我重新构建了包含依赖项的实用程序jar。请看Including dependencies in a jar with Maven。
虽然我删除了一些未被使用的依赖项,但我的pom基本保持不变。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>atlas</groupId>
<artifactId>daas-utilities</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-avro-serializer</artifactId>
<version>5.0.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>confluent</id>
<url>https://packages.confluent.io/maven/</url>
</repository>
</repositories>我将定制的jar放在${project.basedir}/libs中。
我调整了我的docker命令中的maven命令,将我的jar包含在依赖项中。我还发现,mvn install:install-file ...只是在安装jar,而不是(如我所设想的)也安装您的项目。因此,在执行之前,我在最后添加了另一个mvn clean install命令。
docker run -it --rm --name ProcessedObsGen -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven maven:3.3-jdk-8 mvn clean install:install-file -Dfile=/usr/src/mymaven/libs/daas-utilities-0.0.1-SNAPSHOT-jar-with-dependencies.jar -DgroupId=atlas -DartifactId=daas-utilities -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar; mvn clean install; mvn exec:java -Dexec.mainClass="atlas.processed_obs_generator.App"
发布于 2019-07-26 00:36:16
在install-file命令中,您可以在POM读取时定义-DgroupId=atlas:
...
<dependency>
<groupId>atlas.daas-utilities</groupId>
...https://stackoverflow.com/questions/57211381
复制相似问题