首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理Maven POM中的第三方JAR和远程存储库?

如何处理Maven POM中的第三方JAR和远程存储库?
EN

Stack Overflow用户
提问于 2019-07-25 23:38:22
回答 2查看 577关注 0票数 1

我使用的是一个Maven依赖项,它需要设置一个远程存储库。在同一个项目中,我使用自定义构建的JAR,并尝试将其作为依赖项添加。问题是,我收到错误,说Maven无法在远程存储库中找到我的自定义JAR。

在POM中,我有多个依赖项,包括自定义构建的依赖项和需要远程存储库的依赖项(合流)。我已经尝试将我的自定义依赖放在POM中的第一位,但这并没有帮助。我试着从POM中移除存储库,并且我没有得到关于我的自定义构建依赖项的错误,但是我得到了一个远程依赖项的错误。

我正在Maven Docker容器中运行代码。我尝试使用Bash运行Docker容器,不使用Maven命令,然后在容器中手动运行Maven命令,手动检查~/.m2/repository并确认我的自定义构建的JAR就在里面。

运行一个交互式Maven容器:

代码语言:javascript
复制
docker run -it --rm --name ProcessedObsGen -v "$(pwd)":/usr/src/mymaven \
  -w /usr/src/mymaven maven:3.3-jdk-8 /bin/bash

在码头货柜内:

代码语言:javascript
复制
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/repository

pom.xml

代码语言:javascript
复制
<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容器运行代码:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-26 17:13:58

我解决了这个问题。

我重新构建了包含依赖项的实用程序jar。请看Including dependencies in a jar with Maven

虽然我删除了一些未被使用的依赖项,但我的pom基本保持不变。

代码语言:javascript
复制
<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"

票数 1
EN

Stack Overflow用户

发布于 2019-07-26 00:36:16

install-file命令中,您可以在POM读取时定义-DgroupId=atlas

代码语言:javascript
复制
       ...
       <dependency>
            <groupId>atlas.daas-utilities</groupId>
            ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57211381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档