使用Ant Ivy构建,我试图将我的罐子分成一个配置,用于第三方罐子,另一个配置用于我构建和发布的罐子。项目A使用第三方罐子并构建一个项目B所依赖的罐子,但是当我使用蚂蚁常春藤时,我无法让项目B检索项目A罐子。
当我为ProjectB执行ant脚本时,它很好地构建了ProjectA。ProjectA构建将jar发布到本地存储库。ProjectB从公共存储库中检索必要的jar没有问题,但当它尝试检索ProjectA jar时,它会显示UNRESOLVED DEPENDENCY:testproject#ProjectA;2.0.0:在testproject#ProjectA;中找不到配置;2.0.0:“localjars”。它是测试项目#ProjectB;所必需的;2.0.0本地jars
如果我删除了对第二个配置localjars的所有引用,并对所有内容都使用default,就可以很好地工作了。不过,我真的需要把我的罐子分门别类。
我已经成功地使用了从ant脚本传递的修订值来代替下面的“2.0.0”,并用${revision}引用,但conf错误是相同的。
ProjectAivy.xml(为简洁起见,带有依赖项子集):
<ivy-module version="2.0">
<info organisation="testproject" module="ProjectA" revision="2.0.0" status="release" publication="20160524124555"/>
<configurations>
<conf name="default" transitive="false" visibility="public"/>
<conf name="localjars" extends="default" visibility="public"/>
</configurations>
<publications>
<artifact name="projectA-jar-2.0.0" type="jar" conf="localjars" ext="jar"/>
</publications>
<dependencies>
<dependency org="commons-beanutils" name="commons-beanutils" rev="1.7.0" conf="default->master"/>
<dependency org="commons-collections" name="commons-collections" rev="3.1" conf="default->master"/>
</dependencies>
</ivy-module>
ProjectA build.xml发布目标:
<target name="publish" depends="package"
description="--> compile test and publish this project in the local ivy repository">
<ivy:publish artifactspattern="${DEPLOY_DIR_LIB}/[artifact].[ext]"
resolver="local" pubrevision="2.0.0" status="release"
srcivypattern="${ivy.dep.file}" forcedeliver="true" overwrite="true" conf="localjars,default"/>
<echo message="project ${ant.project.name} released with version 2.0.0" />
</target>
项目B ivy.xml:
<ivy-module version="2.0">
<info organisation="testproject" module="ProjectB" revision="2.0.0" status="release" publication="20160524103113"/>
<configurations>
<conf name="default"/>
<conf name="localjars" extends="default"/>
</configurations>
<publications>
<artifact name="projectB-2.0.0" conf="localjars" type="jar" ext="jar"/>
</publications>
<dependencies>
<dependency org="testproject" name="ProjectA" rev="${revision}" transitive="true" conf="localjars->localjars; default->default"/>
</dependencies>
项目代理解析目标:
<target name="resolve" description="--> retrieve dependencies with ivy">
<ivy:retrieve pattern="${DEPLOY_DIR_LIB}/[artifact]-2.0.0.[ext]" revision="2.0.0" conf="localjars" />
</target>
知道怎么回事吗?谢谢
帕特里克
不完全确定您的配置为什么不工作。我建议不要禁用可传递依赖项。您会注意到,在下面的工作示例中,我有一种创建“默认”配置的不同方法。
每个项目都有自己的本地构建和 ivy 文件。协作是通过发布到“本地”存储库的 jar 进行的。
├── build.xml
├── ProjectA
│ ├── build.xml
│ ├── ivy.xml
│ └── src
│ └── Hello.txt
└── ProjectB
├── build.xml
├── ivy.xml
└── src
└── Hello.txt
使用buildlist任务以正确的顺序构建所有模块的主构建文件。
此外,我通常包括一个额外的目标安装常春藤。
<project name="main" default="publish" xmlns:ivy="antlib:org.apache.ivy.ant">
<available classname="org.apache.ivy.Main" property="ivy.installed"/>
<target name="install-ivy" unless="ivy.installed">
<mkdir dir="${user.home}/.ant/lib"/>
<get dest="${user.home}/.ant/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar"/>
<fail message="Ivy has been installed. Run the build again"/>
</target>
<target name="publish" depends="install-ivy">
<ivy:buildlist reference="build-path">
<fileset dir="." includes="*/build.xml"/>
</ivy:buildlist>
<subant target="publish" buildpathref="build-path"/>
</target>
<target name="clean">
<subant target="clean">
<fileset dir="." includes="*/build.xml"/>
</subant>
</target>
<target name="clean-all" depends="clean">
<ivy:cleancache/>
</target>
</project>
“主”配置只包含工件。这个命名约定反映了Maven使用的范围。
还要注意“默认”配置如何扩展“主”和“运行时”。这使客户能够放下他们需要的一切。
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="ProjectA"/>
<configurations>
<conf name="default" description="Master artifact and runtime dependencies" extends="master,runtime"/>
<conf name="master" description="Artifact published by this module"/>
<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>
<publications>
<artifact name="ProjectA" type="jar" ext="jar" conf="master"/>
</publications>
<dependencies>
<!-- compile dependencies -->
<dependency org="org.slf4j" name="slf4j-api" rev="1.7.5" conf="compile->default"/>
<!-- runtime dependencies -->
<dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.5" conf="runtime->default"/>
<!-- test dependencies -->
<dependency org="junit" name="junit" rev="4.11" conf="test->default"/>
</dependencies>
</ivy-module>
请注意,ProjectA是唯一的依赖项,它将远程“默认”配置映射到本地“编译”配置。
另一个微妙的问题是使用“latest.integration”动态修订。这意味着我们不需要硬编码ProjectA的修订。
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="ProjectB"/>
<configurations>
<conf name="default" description="Master artifact and runtime dependencies" extends="master,runtime"/>
<conf name="master" description="Artifact published by this module"/>
<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>
<publications>
<artifact name="ProjectB" type="jar" ext="jar" conf="master"/>
</publications>
<dependencies>
<dependency org="com.myspotontheweb" name="ProjectA" rev="latest.integration" conf="compile->default"/>
</dependencies>
</ivy-module>
要发布的修订设置为属性,如有必要,可以覆盖该属性。
另请注意如何使用 ivy 配置来控制生成中的类路径,使用缓存路径任务
<project name="ProjectA" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">
<property name="build.dir" location="build"/>
<property name="pub.version" value="1.0"/>
<property name="pub.resolver" value="local"/>
<target name="resolve">
<ivy:resolve/>
<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="test.path" conf="test"/>
</target>
<target name="build" depends="resolve">
<mkdir dir="${build.dir}"/>
<jar destfile="${build.dir}/${ant.project.name}.jar" basedir="src"/>
</target>
<target name="publish" depends="build">
<ivy:publish pubrevision="${pub.version}" resolver="${pub.resolver}" overwrite="true">
<artifacts pattern="${build.dir}/[artifact].[ext]"/>
</ivy:publish>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
</project>
与其他项目相同,只是具有不同的名称属性。
<project name="ProjectB" default="build" ....
问题内容: 我正在使用一个每个键有两个值的Multimap。下面是我用来分别获取每个值的代码: 代码的第一位获取第一个对象值: 然后,我正在使用另一种方法来检索其他值。此方法将第一个对象作为参数: 这似乎是一种“骇人的”做事方式,那么我有什么办法可以更轻松地获得价值? 问题答案:
我目前正在使用以下浏览请求从musicbrainz获取所需信息,浏览特定艺术家发布的录音。例如:(酷玩) http://musicbrainz.org/ws/2/release?artist=cc197bad-dc9c-440d-a5b5-d52ba2e14234 我对每个录音都有兴趣获得它的工作id。现在我试着在includes中添加'recording rels',但它似乎只返回发布和录音之间
我试图用gradle设置工件(APK/AAR文件)构建过程,类似于我使用Maven时所使用的方法。 build.gradle文件: gradle.properties文件:
我有一个gradle构建脚本,它检索了一些常见的依赖项,并将它们组合起来创建了一个“胖罐子”。
我正在制作一个自定义WordPress主题,其中我需要两种类型的页面。 一个索引页面,包含所有最近帖子的摘录。这个作品。(概述后页) 当你点击一个帖子的页面,显示帖子的全部内容。 现在,索引页面工作正常,并显示所有最近的帖子。但是当我点击一篇文章时,我会带着那篇文章进入索引页面模板。相反,我想转到另一个显示完整文章的页面模板。 我一直在尝试许多事情,寻找解决方案,但运气不好。我希望有人能帮助我。
我有一个用Java编写的管理应用程序,可以管理我的用户 我创建了一个自定义json 这就是我的JSON看起来的样子 在我的列表中,我只显示电子邮件地址 现在我的问题,例如,如果我单击包含电子邮件的列表,我想在对话框中显示与此电子邮件相关的数据,即、和 怎样我可以检索其他值吗使用电子邮件? 我在网上找不到任何关于它的信息