像Maven Repository这样的Maven存储库提供了最广泛的依赖管理项目.
Ivy提供了访问maven存储库和从那里下载工件的可能性.这些存储库中只有pom文件,没有ivy.xml.
可以使用在m2兼容模式下运行的常春藤解析器检索它们.
<ibiblio name="maven2" m2compatible="true"/>
Run Code Online (Sandbox Code Playgroud)
特别是对于这个用例,我想知道:
我正在使用Scala IDE 2.0.1和SBT 0.11.2从Akka 2.0.1开始.我的build.sbt看起来像这样:
name := "akka"
version := "0.1"
scalaVersion := "2.9.2"
resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/"
libraryDependencies += "com.typesafe.akka" % "akka-actor" % "2.0.1"
Run Code Online (Sandbox Code Playgroud)
如你所见,没有什么了不起的.
现在,我如何告诉Eclipse将工件与源分类器一起用于akka-actor库?
在SBT中,我可以使用update-classifiers将源代码和Javadocs下载到Ivy存储库,但即使我在从sbteclipse插件运行eclipse命令之前执行此操作,Eclipse仍然不知道源代码.当然,我可以手动执行此操作,但这对于更多库来说不能很好地扩展.
我还尝试将IvyDE插件与deliver-local命令一起使用.虽然这集成了依赖关系管理,但它似乎对源代码没有帮助.
有线索吗?
编辑:这是从deliver-local生成的ivy.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<info organisation="default" module="akka_2.9.2" revision="0.1" status="release" publication="20120506225613">
<description>
akka
</description>
</info>
<configurations>
<conf name="compile" visibility="public" description=""/>
<conf name="runtime" visibility="public" description="" extends="compile"/>
<conf name="test" visibility="public" description="" extends="runtime"/>
<conf name="provided" visibility="public" description=""/>
<conf name="optional" visibility="public" description=""/>
<conf name="sources" visibility="public" description=""/>
<conf name="docs" visibility="public" …Run Code Online (Sandbox Code Playgroud) 在gradle中发布到存储库时,有没有办法获得下一个版本?
例如,如果我的3.0.1存储库中有版本,我想要发布的版本3.0.2.
ivy有一个ant命名的任务,buildnumber它完全是这样的:
<project xmlns:ivy="antlib:org.apache.ivy.ant"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<target name="ivyBuildNumber" description="Use ivy get the next build number">
<ivy:buildnumber
resolver="url-chain"
organisation="${ivy.organisation}"
module="${ivy.module}"
revision="${version.base}"/>
<echoproperties prefix="ivy.new."/>
</target>
Run Code Online (Sandbox Code Playgroud)
有没有办法这样做gradle?如果不能如何ivy从gradle中访问任务ant?
在我的build.gradle呼唤中ant
ant.importBuild 'build.xml'
Run Code Online (Sandbox Code Playgroud) Ivy非常适合管理依赖项,但它并不是要处理许多模块的整个软件生命周期.这就是说,它有几个特点,似乎支持它(比如在status和branch属性),以及常春藤最佳实践Blurb的暗示能够促进整合修订里程碑或释放,"有一些工作".
遗憾的是,我还没有找到关于如何管理开发 - >测试 - >部署周期的明确指导.以下是我想要实现的一些事项:
(鉴于开发人员通常在本地工作空间中的许多模块上工作)
我很清楚的一些事情是:
status应用于表示该修订版是仅用于开发,是否已准备好进行测试,或是否已准备好进行生产branch属性应足以处理不同的项目分支以下是我正在努力解决的问题:
假设我在我的工作区中检出了这些模块:

现在我对模块a感到满意,并决定使用我工作区中签出的版本发布里程碑.回购中需要做的是:
e-1.0-RC1 发表d-1.1-RC2获得发布,e-1.0-RC1作为依赖项引用c-2.0-RC1获得发布,d-1.1-RC2作为依赖项引用b-3.3-RC1获得发布,e-1.0-RC1作为依赖项引用a-7.1-RC2获取发布,引用c-2.0-RC1和b-3.3-RC1依赖.如果我为此尝试自己动手,我可能最终会做一些工作区管理,ivy.xml查找和替换等等.在我打开那些蠕虫之前,我想得到一些意见.解决这个问题的最佳方法是什么?
我完全不知道蚂蚁任务常春藤:发布应该如何工作.
我希望我做我的正常构建,它会创建一堆jar文件,然后我会将这些jar推送到(本地)存储库.
如何指定从哪里检索构建的jar,以及它们将如何最终存储在存储库中?
更新:
<target name="publish-local" description="--> Publish Local">
<ivy:retrieve />
<ivy:publish resolver="local" pubrevision="${release.version}" status="release" update="true" overwrite="true">
<artifacts pattern="${dist.dir}/[organisation]-[module].[ext]" />
</ivy:publish>
</target>
Run Code Online (Sandbox Code Playgroud)
这实际上有效,我之前没有包含检索.
但是我仍然有一些问题,假设我想发布3个罐子,openscada-utils.jar,openscada-utils-sources.jar和openscada-utils-javadocs.jar作为openscada-utils-0.9.2.jar,openscada-utils -0.9.2-sources.jar和openscada-utils-0.9.2-javadocs.jar
我不完全清楚,实际名称是如何组合的,以及我可以指定它们应该得到的名称.(使用上面的片段,jar总是只调用utils.jar).
更新1:
我得到它(有点),但它仍然感觉不对.不知何故,所有教程都关注第三方项目的依赖关系,但对我来说同样重要的一点是处理项目特定的依赖关系.
我有一堆子项目,它们以各种方式相互依赖.考虑常春藤:发布我不清楚如何开始.
我该如何处理第一个版本?我有一个共同的版本号用于所有子项目,以表明它们属于一起(假设为0.9).因此第一次修订应该是0.9.0,但到目前为止,我的项目中没有任何内容存在于我的存储库中.如何让Ivy分配此修订号.
在开发过程中,我想再次发布构建的文件,而不更改目前的版本号.
如果我完成了我的工作,我想将其推送到共享存储库(并将修订版号从0.9.0增加到0.9.1),建议的方法是什么?
对于实际的版本,我想制作具有依赖关系的发行版,但不知道,我想我可以使用不同的配置.我怎样才能利用这一优势?
可能重复:
常春藤无法解决依赖性,无法找到原因
我正在尝试运行以下构建任务(initIvy):
<?xml version="1.0" encoding="UTF-8"?>
<project name="myproject-build" default="package" basedir=".." xmlns:ivy="antlib:org.apache.ivy.ant">
<property file="build/build.properties"/>
<property environment="env"/>
<!-- Ant library path, including all of its plugins. -->
<path id="ant.lib.path">
<fileset dir="${env.ANT_HOME}/lib" includes="*.jar"/>
</path>
<!-- CONFIGURE IVY -->
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant" classpathref="ant.lib.path"/>
<!-- Use Ivy tasks to resolve dependencies into the local Ivy cache. -->
<target name="initIvy">
<!-- Initialize Ivy and connect to host repository. -->
<echo message="Initializing Apache Ivy and connecting to the host repository."/>
<ivy:settings url="${ivy.std.repo.settings.url}" realm="${ivy.std.repo.realm}" username="${ivy.std.repo.username}" passwd="${ivy.std.repo.password}"/> …Run Code Online (Sandbox Code Playgroud) clean即使项目依赖关系管理配置未更改,SBT 也会在每次运行依赖项解析后运行.在CI服务器上运行时,这非常耗时.
但是文件说:
- 通常,如果自上次成功解析后没有依赖关系管理配置发生更改且检索到的文件仍然存在,则sbt不会要求Ivy执行解析.
如何在每次构建项目时阻止sbt进行依赖项解析sbt clean publish-local?
更新
我发现当我进入交互模式时,sbt也会运行解析sbt.
UPDATE2
正如@Ezhik指出的,如果我能保持target/resolution-cache那么SBT不会解决后干净的依赖.所以我试图resolution-cache从目标目标移出:
ivyConfiguration <<= (externalResolvers, ivyPaths, offline, checksums, appConfiguration, target, streams) map { (rs, paths, off, check, app, t, s) =>
val resCacheDir = t / ".." / "resolution-cache"
new InlineIvyConfiguration(paths, rs, Nil, Nil, off, Option(lock(app)), check, Some(resCacheDir), s.log)
}
Run Code Online (Sandbox Code Playgroud)
现在,Build.scala解析缓存中的代码被放置在项目根目录中,因此在之后保留clean,但无论如何都要进行解析.所以我认为这种方法是错误的或不充分的.
看起来 Angular Ivy 还没有准备好。我正在尝试使用 ivy 构建我的项目,这是 Angular 9 的主要思想。许多库与此功能不兼容,其中一个库是@angular/flex-layout. Material 和 service-worker 也有同样的问题。
使用ng build --prod --aot -c=production脚本构建我的项目后,我得到:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
node_modules/@angular/flex-layout/core/typings/media-trigger/media-trigger.d.ts:71:18 - error TS2314: Generic type '??FactoryDef' requires 2 type argument(s).
71 static ?fac: ?ngcc0.??FactoryDef<MediaTrigger>;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
node_modules/@angular/flex-layout/extended/typings/show-hide/show-hide.d.ts:18:18 - error TS2314: Generic type '??FactoryDef' requires 2 type argument(s).
18 static ?fac: ?ngcc0.??FactoryDef<ShowHideStyleBuilder>;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
node_modules/@angular/flex-layout/extended/typings/show-hide/show-hide.d.ts:49:18 - error TS2314: Generic type '??FactoryDef' requires 2 type argument(s).
49 static ?fac: ?ngcc0.??FactoryDef<ShowHideDirective>;
Run Code Online (Sandbox Code Playgroud)
错误比我上面写的要长,我花时间仔细搜索了这个问题,除了禁用常春藤,这不是一个好的选择。