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

马丁:

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

在我的POM中,我有多个依赖项,包括我自定义构建的依赖项和需要远程存储库(融合)的依赖项。我曾尝试将自定义依赖项放在POM中,但这没有帮助。我尝试从POM中删除存储库,但没有得到关于我的自定义依赖项的错误,但对于远程依赖项却出现了错误。

我在Maven Docker容器中运行代码。我尝试使用Bash shell运行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

在Docker容器中:

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

<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"

我得到错误:

无法在项目processing-obs-generator上执行目标:无法解析项目图集的依赖项:processed-obs-generator:jar:0.0.1-SNAPSHOT:找不到工件atlas.daas-utilities:daas-utilities:jar:融合中的0.0.1-SNAPSHOT(https://packages.confluent.io/maven/

我还尝试下载融合的jar,将其放置在与自定义jar相同的位置,以相同的方式安装,然后从pom中删除远程存储库。然后,我说的ClassNotFoundException融合类出现错误。

马丁:

我能够解决。

我重建了包含依赖项的实用程序jar。请参阅使用Maven在jar中包含依赖项

尽管删除了一些未使用的依赖项,但我的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 run命令中的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"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 Maven 中捆绑第三方 jar?

如何在Rust / Cargo中处理第三方静态C库依赖关系?

将第三方库安装到托管Maven存储库中的最佳做法?

如何在pom.xml中添加\安装到新创建的\第三方jar的maven依赖项

如何处理第三方库中的警告/提示?

我应该如何在setup.py脚本中处理导入第三方库?

如何在C ++中正确处理线程中永久挂起的第三方库调用?

我如何在openLiberty Maven构建中包含第三方库

在Maven中构建/部署第三方项目,但上传到我的快照存储库

如何在Dragal 8中使用Packosist上未安装的第三方库安装第三方库?

如何在Eclipse中的第三方库中设置断点?

如何在angular 6中捕获第三方库中的数据?

如何在React中处理第三方dom操纵?

将第三方依赖项部署到Maven存储库的简便方法

如何在Symfony 3.3中加载第三方库

如何在React钩子中初始化第三方库(konvajs)

如何在styles.xml中引用第三方库的attrs?

如何在Ant的javadoc任务中链接第三方库

如何在Google App Engine中包含第三方Python库?

如何在C ++ Windows中包含第三方库?

如何在Meteor.js中包含第三方JavaScript库?

如何在发行版中附加第三方库

如何在React Native中抑制由于第三方PropTypes库引起的警告

如何在Android cmake外部构建系统中链接第三方库?

如何在Java中更改第三方库的日志级别

如何在ReactJS应用中插入第三方库

如何在Xcode 6.0中构建和包含第三方C库

如何在 web api 或库中包装第三方对象?

如何在 Rust 中为第三方库实现迭代器