我是Ivy的新手,并且非常简单地尝试了它,用于获取中央Maven存储库中可用的常用库,例如Guava和Gson:
<ivy-module version="2.0">
<info organisation="com.company" module="foobar"/>
<dependencies>
<dependency org="com.google.guava" name="guava" rev="10.0.1"/>
<dependency org="com.google.code.gson" name="gson" rev="2.0"/>
</dependencies>
</ivy-module>
Run Code Online (Sandbox Code Playgroud)
在Windows上,默认情况下,Ivy将其文件存储在%USERPROFILE%\.ivy2\cache\; 在Unix-y系统上,它们是在下载的$HOME/.ivy2/.
我想这是一个非常基本的问题:如何告诉Ivy下载二进制文件和源代码,并将二进制jar放在一个(任意)目录中,并将源jar放在另一个目录中?
例如,我希望Ivy将所有下载的二进制文件放入其中[project_home]/WebContent/WEB-INF/lib.
请注意,我使用Ivy via Ant,沿着以下行,而不是IDE插件.
<project xmlns:ivy="antlib:org.apache.ivy.ant" name="ivy" default="resolve" >
<target name="resolve" description="retrieve dependencies with ivy">
<ivy:retrieve/>
</target>
<path id="ivy.lib.path">
<fileset dir="tools/buildlibs" includes="*.jar"/>
</path>
<taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
</project>
Run Code Online (Sandbox Code Playgroud) 如此处所述,可以使用maven部署到Amazon S3.
我们如何用sbt做同样的事情,即用sbt发布到S3?
我有一个问题,我已经在我们内部公司svn的ivy.xml中定义了依赖项.我能够在没有任何代理任务的情况下访问这个svn站点.虽然我的依赖项驻留在ibiblio上,但这是我们公司之外的东西,并且需要代理才能下载内容.我在这里使用常春藤时遇到问题.
我在build.xml中有以下内容
<target name="proxy">
<property name="proxy.host" value="xyz.proxy.net"/>
<property name="proxy.port" value="8443"/>
<setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}"/>
</target>
<!-- resolve the dependencies of stratus -->
<target name="resolveTestDependency" depends="testResolve, proxy" description="retrieve test dependencies with ivy">
<ivy:settings file="stratus-ivysettings.xml" />
<ivy:retrieve conf="test" pattern="${jars}/[artifact]-[revision].[ext]"/><!--pattern here specifies where do you want to download lib to?-->
</target>
<target name=" testResolve ">
<ivy:settings file="stratus-ivysettings.xml" />
<ivy:resolve conf="test" file="stratus-ivy.xml"/>
</target>
Run Code Online (Sandbox Code Playgroud)
以下是stratus-ivysettings.xml的摘录
<resolvers>
<!-- here you define your file in private machine not on the repo (e.g. jPricer.jar or edgApi.jar)-->
<!-- This we …Run Code Online (Sandbox Code Playgroud) 我正在使用Ivy进行项目依赖管理,除了我一直有的一个问题之外,它一直运作良好.Ivy正在下载某些依赖项,但它并没有将它们安装到我的项目中.例如,log4j.jar没有被放入项目的lib文件夹中,即使它被列为依赖项并且正在成功下载.这是我的决心输出:
ivy-resolve:
[ivy:configure] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::
[ivy:configure] :: loading settings :: file = C:\...\...\...\...\ivysettings.xml
[ivy:resolve] :: resolving dependencies :: com.gdi#gdi-core;0.0.1.SNAPSHOT
[ivy:resolve] confs: [default]
[ivy:resolve] found org.apache.axis#axis;1.4 in archiva.internal
[ivy:resolve] found org.apache.axis#axis-jaxrpc;1.4 in archiva.internal
[ivy:resolve] found org.apache.axis#axis-saaj;1.4 in archiva.internal
[ivy:resolve] found wsdl4j#wsdl4j;1.6.2 in archiva.internal
[ivy:resolve] found org.slf4j#slf4j-log4j12;1.6.1 in archiva.internal
[ivy:resolve] found org.slf4j#slf4j-api;1.6.1 in archiva.internal
[ivy:resolve] found log4j#log4j;1.2.16 in archiva.internal
[ivy:resolve] found log4j#apache-log4j-extras;1.1 in archiva.internal
[ivy:resolve] found org.apache.commons#commons-email;1.1 in archiva.internal
[ivy:resolve] found javax.mail#mail;1.4 in archiva.internal
[ivy:resolve] found …Run Code Online (Sandbox Code Playgroud) 使用gradle依赖文档,我们有一个build.gradle,其中包含这样的代码片段.
repositories {
mavenCentral()
ivy {
name = 'localRepo'
artifactPattern "http://localRepo.com/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
}
}
dependencies {
compile group: 'localRepo', name: 'my-private-library', version: '2.5'
}
Run Code Online (Sandbox Code Playgroud)
这个设置确实正确地下载了所有内容,但我想调整它以便组localRepo中的东西只是试图从常春藤存储库中提取而localRepo仅用于组localRepo.localRepo只保存私有jar,所以我们不希望它被用作第一个repo,我们不想花很长时间来查询mavenCentral对于不存在的jar.
基本上我想在依赖中说使用特定的repo或者本地常春藤repo仅用于特定的组.是否有捷径可寻?
在解析我的ivy.xml时,我得到了一长串错误,所有错误都是"未知的解析器XYZ".我知道解析器,它用于同一个项目但不同的任务.据我所知,用于创建缓存条目的解析器是存储的,而后续解析器无法确定.
问题是:我该如何避免这种情况?像这样的似乎不是一个错误,更像是一个警告,因为我能够解决所有依赖关系并继续编译.
我目前ANT_HOME找到了/home/<myuser>/ant/1.8.4/ant-1.8.4.
我刚刚下载了包含其依赖项的Apache Ivy tarball.我把它提取到了/home/<myuser>/ivy/2.3.0-rc1/ivy-2.3.0-rc1.
然后我复制/home/<myuser>/ivy/2.3.0-rc1/ivy-2.3.0-rc1/lib/*.jar到ANT_HOME/lib.如果我理解Ant如何使用插件/扩展是正确的,那么Ant现在应该能够在运行时访问所有Ivy的任务.
我的下一个问题是,如何在我的Ant构建文件中定义常春藤任务?说我想用ivy-retrieve,ivy-resolve和ivy-publish任务.当我从命令行运行Ant构建时,我需要做的所有配置(在XML中)以使这些任务正常工作(我不会通过Ant-Eclipse插件构建).提前致谢!
请查看最新评论.
我有几个使用scala 2.10.2编写的项目,并使用sbt 0.12.4构建.由于我的操作系统是Ubuntu,我使用SBT.deb包来安装sbt 0.12.4.一切都很好.我用sbt建立了我的项目.
昨天我想将sbt更新到版本0.13.0.我下载并安装了新的.deb软件包.项目配置尚未更改.
在更新后运行SBT时,我遇到此故障:
$ sbt
Loading /usr/share/sbt/bin/sbt-launch-lib.bash
Getting org.scala-sbt sbt 0.13.0 ...
:: problems summary ::
:::: WARNINGS
module not found: org.scala-sbt#sbt;0.13.0
==== local: tried
/home/myUser/.ivy2/local/org.scala-sbt/sbt/0.13.0/ivys/ivy.xml
::::::::::::::::::::::::::::::::::::::::::::::
:: UNRESOLVED DEPENDENCIES ::
::::::::::::::::::::::::::::::::::::::::::::::
:: org.scala-sbt#sbt;0.13.0: not found
::::::::::::::::::::::::::::::::::::::::::::::
:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
unresolved dependency: org.scala-sbt#sbt;0.13.0: not found
Error during sbt execution: Error retrieving required libraries
(see /home/myUser/.sbt/boot/update.log for complete log)
Error: Could not retrieve sbt 0.13.0
Run Code Online (Sandbox Code Playgroud)
该~/.sbt/update.log文件可在此处获得: …
我不是sbt的专家,所以我的问题可能是有点菜鸟,但我注意到,当我创建一个项目并使用sbt下载它的依赖项时,如果我用intellij打开项目,所有的依赖项都会重新加载,同样发生在逆orden intellij-> sbt和激活器..
关于sbt的我(差)知识比使用常春藤和依赖关系下载到〜/ .ivy2 /文件夹...这是sbt正在下载我的deps,但似乎比intellij正在使用其他文件夹.
我个人并没有使用这么多激活剂,但我想配置sbt和intellij使用相同的常春藤路径......
2)最近我使用sbt + publishLocal将finagle-postgre发布到我的本地常春藤,我可以在我的常春藤文件夹中查看
/home/yo/.ivy2/local/com.twitter/finagle-postgres_2.11/0.1.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
但遗憾的是intellij无法解决此依赖关系,我尝试将此行添加到我的构建中
resolvers += Resolver.file("Local", file( Path.userHome.absolutePath + "/.ivy2/local"))(Resolver.ivyStylePatterns)
Run Code Online (Sandbox Code Playgroud)
但似乎行不通
3)下载的路径依赖项与使用哪个sbt-launch.jar文件有关?我怎么知道sbt-lauch.jar文件现在正在使用sbt ...
多谢你们!
我有一个使用番石榴集合的临时文件,我得到了一些奇怪的错误,我不得不假设是由于编辑器和实际运行环境假设番石榴集合的不同版本:
Exception in thread "main" java.lang.IllegalAccessError: tried to access method com.google.common.collect.Range.<init>(Lcom/google/common/collect/Cut;Lcom/google/common/collect/Cut;)V from class
com.google.common.collect.Ranges
at com.google.common.collect.Ranges.create(Ranges.java:80)
at com.google.common.collect.Ranges.closedOpen(Ranges.java:114)
at Scratch.main(scratch_2.java:69)
Run Code Online (Sandbox Code Playgroud)
并不是说我实际上可以肯定地知道这一点,因为我也无法弄清楚我应该如何查看暂存文件正在拉入哪个版本。我已经从我的项目的 deps 中完全删除了番石榴,并且暂存文件仍然有效。 .. 为什么?哪里来的图书馆???临时运行配置完全没有任何指示这一点的内容:
但它仍然运行得很好。我发现如果我从本地常春藤缓存中删除番石榴条目,它将不再运行。如果我然后将番石榴添加回我的项目 deps,它会再次出现在我的 ivy 缓存中,然后即使我从项目 deps 中删除番石榴,临时文件也可以再次正常运行。那么临时文件是否只是选择了一个随机版本之类的?位于 的常春藤缓存~/.ivy2/cache/com.google.guava如下所示:
但由于某种原因,还有一个“jars”文件夹,里面有一个 guava-12.0:
同样,我不知道正在使用哪个版本,或者为什么缓存有这么多不同的版本。有任何想法吗?