gpt4 book ai didi

maven - 如何使用部署 :deploy-file? 将 OSGi 包部署到 Maven 存储库

转载 作者:行者123 更新时间:2023-12-01 19:19:56 24 4
gpt4 key购买 nike

我有一个由另一个团队使用 Maven 构建的 OSGi 包。 POM 文件将其打包声明为“bundle”并使用 Apache Felix 插件。

我需要将此 Artifact 部署到本地 Maven 存储库 (Nexus),以便我们的内部项目可以使用它。

我使用了 deploy:deploy-file 目标将包部署到存储库,就像使用标准 JAR 文件一样,并且不会出现错误。我从包中提取了嵌入的 POM 并将其传递到命令行,因此命令行是:

mvn deploy:deploy-file -Dfile=3rdpartybundle.jar -DpomFile=pom.xml -DrepositoryId=internal -Durl=http://internalserver/nexus

问题是,当我像这样部署它时,打包设置为 bundle ,因此存储库中的 Artifact 名称最终以 .bundle 扩展名结束,而不是 .jar 扩展名。

现在,我们无法弄清楚如何将其声明为依赖项。如果我们这样声明:

        <dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<type>bundle</type>
</dependency>

我们收到一条错误,指出无法解决依赖关系。有趣的是,错误消息中的 GAV 坐标实际上将“jar”作为依赖项类型的值,即使我们将其设置为“bundle”。

如果我们将依赖项更改为:

        <dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<type>jar</type>
</dependency>

我们得到了完全相同的 Unresolved 依赖错误。

那么,您应该如何将打包为 bundle 的 Artifact 部署到 Maven 存储库,以便它可以用作另一个项目的编译时依赖项?

谢谢

最佳答案

问题是“3rdpartybundle.jar”是在没有设置extensions=true和/或支持的类型的情况下构建的:

<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
...
<extensions>true</extensions>
...
<configuration>
<supportedProjectTypes>
<supportedProjectType>jar</supportedProjectType>
<supportedProjectType>war</supportedProjectType>
</supportedProjectTypes>

如果您无法修复上游问题,那么有几个选择;

1) 使用新项目 pom 将其重新打包为 Jar:

                    <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.3</version>
<configuration>
<actTransitively>false</actTransitively>
<outputDirectory>target/classes</outputDirectory>
<artifactItems>
<artifactItem>
<groupId>3rd</groupId>
<artifactId>party</artifactId>
<version>X.Y.Z</version>
</artifactItem>
</artifactItems>
</configuration>
<executions>
<execution>
<goals>
<goal>unpack</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
</plugin>

2) 尝试将 mvn deploy:deploy-file-DgeneratePom=false -Dpackaging=jar -Dfile=/path/to/3rdpartybundle.jar 一起使用,但不指定-DpomFile= - 希望 3rdpartybundle.jar 内没有 META-INF/maven/pom.xml - 它应该可以使用它,但您需要指定 groupId/artifactId/version 参数,如下所示不会从项目的 pom 中派生。

我知道我过去已经构建过 bundle Artifact 并将它们部署到我们的连接(v1.9.0.1)中,并且 Spring 存储库中的那些也被键入 bundle ,但不记得有任何问题。 (顺便说一句,您不需要在依赖项声明中指定 bundle ,据我所知,如果它是唯一应该推断的 Artifact )

关于maven - 如何使用部署 :deploy-file? 将 OSGi 包部署到 Maven 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7406600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com