gpt4 book ai didi

遗留存储库的 Ivy 依赖管理

转载 作者:行者123 更新时间:2023-12-04 23:34:13 24 4
gpt4 key购买 nike

我们有一个没有 ivy.xml 和其他元数据文件的存储库。因为,它由另一个不使用 ivy/maven 但会继续频繁交付代码的团队发布。

依赖所需的 jar 以平面结构存储在单个目录中,没有修订数据。缺少组织/模块/修订结构。

ivy 是否允许在核心产品中进行此类依赖解析,或者我是否必须编写自定义解析器?

谢谢

最佳答案

标准解析器应该能够获取 atifacts(urlfilesystem 等)。你将面临的问题是,默认情况下,ivy 假设修订版永远不会改变。如果没有版本信息,您将不得不调整标准解析器设置以强制 ivy 始终检查工件。

ivy concepts页面解释了这是如何工作的:

Some people, especially those coming from maven 2 land, like to use one special revision to handle often updated modules. In maven 2 this is called a SNAPSHOT version, and some argue that it helps save disk space to keep only one version for the high number of intermediary builds you can make whilst developing.

Ivy supports this kind of approach with the notion of "changing revision". A changing revision is just that: a revision for which Ivy should consider that the artifacts may change over time. To handle this, you can either specify a dependency as changing on the dependency tag, or use the changingPattern and changingMatcher attributes on your resolvers to indicate which revision or group of revisions should be considered as changing.

我个人不喜欢这种依赖管理。您的构建是一个移动的球门柱,很难保持稳定。

我鼓励说服其他团队至少为他们发布的每个工件附加一个内部版本号。然后,您的 ivy 构建可以使用动态修订来解决工件问题。关键在于,当您发布代码时,您的模块将依赖于其第 3 方库的特定版本。

更新

以下是一个示例项目。它使用 Maven Central 和本地存储库来下载其依赖项。

├── build
│   ├── compile
│   │   ├── artifact1.jar <-- Changing artifact
│   │   └── slf4j-api.jar
│   ├── runtime
│   │   ├── artifact1.jar <-- Changing artifact
│   │   ├── artifact2.jar <-- Changing artifact
│   │   ├── log4j.jar
│   │   ├── slf4j-api.jar
│   │   └── slf4j-log4j12.jar
│   └── test
│   ├── artifact1.jar <-- Changing artifact
│   ├── artifact2.jar <-- Changing artifact
│   ├── artifact3.jar <-- Changing artifact
│   ├── hamcrest-core.jar
│   ├── junit.jar
│   ├── log4j.jar
│   ├── slf4j-api.jar
│   └── slf4j-log4j12.jar
├── build.xml
├── ivysettings.xml
└── ivy.xml

本地仓库没有版本控制并且没有 ivy 文件。通常 ivy 解析器需要 ivy 文件(或者对于 Maven 来说是 POM)来确定远程模块是否已经改变。在没有元数据的情况下,您可以在 ivy 文件中将依赖项标记为已更改。

build.xml

<project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">

<target name="build" description="do something">
<ivy:retrieve pattern="build/[conf]/[artifact].[ext]"/>
</target>

<target name="clean" description="Cleanup build files">
<delete dir="build"/>
</target>

<target name="clean-all" depends="clean" description="Additionally purge ivy cache">
<ivy:cleancache/>
</target>

</project>

注意事项:

  • 使用 ivy 构建文件。检索任务将文件组装到它们的各种配置分组中。

Ivy .xml

<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="demo"/>

<configurations>
<conf name="compile" description="Required to compile application"/>
<conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
<conf name="test" description="Required for test only" extends="runtime"/>
</configurations>

<dependencies>
<!-- compile dependencies -->
<dependency org="org.slf4j" name="slf4j-api" rev="1.7.5" conf="compile->default"/>
<dependency org="myorg" name="artifact1" rev="NA" conf="compile->default" changing="true"/>

<!-- runtime dependencies -->
<dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.5" conf="runtime->default"/>
<dependency org="myorg" name="artifact2" rev="NA" conf="runtime->default" changing="true"/>

<!-- test dependencies -->
<dependency org="junit" name="junit" rev="4.11" conf="test->default"/>
<dependency org="myorg" name="artifact3" rev="NA" conf="test->default" changing="true"/>
</dependencies>

</ivy-module>

注意事项:

  • “myorg”依赖项有一个虚拟的“NA”条目作为它们的修订版,并标记为“正在更改”。

Ivy 设置.xml

<ivysettings>
<settings defaultResolver="central" />
<resolvers>
<ibiblio name="central" m2compatible="true"/>
<url name="myorg-repo">
<artifact pattern="http://localhost:8080/userContent/[artifact].[ext]"/>
</url>
</resolvers>
<modules>
<module organisation="myorg" resolver="myorg-repo"/>
</modules>
</ivysettings>

注意事项:

  • “myorg-repo”解析器设置为仅下载“myorg”依赖项。这使得所有其他依赖项都可以由 Maven Central 解决。
  • “myorg-repo”解析器只是声明了一个工件模式,我假设没有要检索的 ivy 文件。

关于遗留存储库的 Ivy 依赖管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19182908/

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