gpt4 book ai didi

Maven解压最新版本的tar.gz神器

转载 作者:行者123 更新时间:2023-12-02 01:48:37 27 4
gpt4 key购买 nike

目标是从存储库获取最新的 tar.gz Artifact 并将其解压到某个特定位置。

        <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.enterprise</groupId>
<artifactId>skrillex</artifactId>
<version>${product.version}</version>
<type>tar.gz</type>
<outputDirectory>target/product</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>

还有

<dependencies>
<dependency>
<groupId>com.enterprise</groupId>
<artifactId>skrillex</artifactId>
<version>${product.version}</version>
<type>tar.gz</type>
</dependency>
</dependencies>

但我们收到错误:

[INFO] --- maven-dependency-plugin:2.5.1:unpack (unpack-unix) @ ... ---
[INFO] Configured Artifact: com.enterprise:skrillex:[1.1.70,):tar.gz
Downloading: https://repo/com/enterprise/skrillex/[1.1.70,)/skrillex-[1.1.70,).tar.gz

...

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.5.1:unpack (unpack-unix) on project ...: Unable to resolve artifact. Could not transfer artifact com.enterprise:skrillex:tar.gz:[1.1.70,) from/to ext (repo....): IllegalArgumentException

最佳答案

注意:以下内容未经测试,但应该可以工作

好的,这里的问题是<artifactItem>不解析版本范围。

您需要做的是从dependency:unpack切换至dependency:unpack-dependencies

例如

    <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeTypes>tar.gz</includeTypes>
<includeArtifactIds>skrillex</includeArtifactIds>
<outputDirectory>target/product</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>

(对于后续的任何人,您需要添加依赖项确保您指定类型,例如

<dependencies>
<dependency>
<groupId>com.enterprise</groupId>
<artifactId>skrillex</artifactId>
<version>${product.version}</version>
<type>tar.gz</type>
</dependency>
</dependencies>

)

这应该确保 Maven 解析范围,并且由于文件类型与类路径不兼容,因此依赖项无论如何都不会在此 Artifact 的传递类路径上。

如果您使用类路径兼容的依赖项执行此操作,例如一个.jar依赖性,或可以被视为此类的依赖性,例如一个.zip .war 中的依赖性那么您需要添加 <scope>test</scope><optional>true</optional>到依赖关系,以便传递依赖树不被污染。

潜在问题

有一些事情你需要注意:

  • Maven 2.x 不会跟踪远程存储库中是否存在辅助 Artifact ,因此如果 .tar.gz未附加到每个版本(或更重要的是每个 -SNAPSHOT 版本),那么您最终可能会找不到 Artifact

  • Maven 3.x 确实跟踪 maven-metadata.xml 中的 side-artifact 存在情况。但 IIRC 仅适用于 -SNAPSHOT版本,其想法是,如果您部署“部分”快照,您仍然可以解析所有最新的辅助 Artifact (即使最新的是针对同一版本的较旧的 -SNAPSHOT

  • 使用版本范围是一个非常糟糕的计划。当范围根据上游 <repositories> 的更新设置得到解析时,这会给项目的下游消费者带来巨大的痛苦。 。请重新考虑并使用固定版本。

关于Maven解压最新版本的tar.gz神器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16799855/

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