我正在使用ant,ivy和nexus repo manager来构建和存储我的工件。我设法让一切工作:依赖解析和发布。直到遇到问题......(当然!)。
我在nexus中发布了一个'release'repo,它被锁定为'禁用重新部署'(即使你将设置更改为'允许重新部署'(非常蹩脚的用户界面)。你可以想象我是多么生气在我意识到这种情况发生之前,我的更改没有通过回购更新。
无论如何,我现在必须切换所有内容以在nexus中使用“快照”回购。问题是这会弄乱我的发布。我尝试了各种各样的东西,包括广泛的谷歌搜索,并没有任何地方。我得到的错误是错误的PUT请求,错误代码为400。
如果有人这样工作,请给我一个关于我缺少的指针。
非常感谢,
阿拉斯泰尔
fyi,这是我的配置:
请注意,我已删除任何尝试获取快照的工作,因为我不知道实际上(可能)有用的是什么以及什么是完整的guff。因此,这是仅限工作版本的设置。
另外,请注意我已添加XXX-API ivy.xml仅供参考。我甚至无法获得xxx-common发布(甚至没有依赖)。
Ant任务:
<target name="publish" depends="init-publish">
<property name="project.generated.ivy.file" value="${project.artifact.dir}/ivy.xml"/>
<property name="project.pom.file" value="${project.artifact.dir}/${project.handle}.pom"/>
<echo message="Artifact dir: ${project.artifact.dir}"/>
<ivy:deliver
deliverpattern="${project.generated.ivy.file}"
organisation="${project.organisation}"
module="${project.artifact}"
status="integration"
revision="${project.revision}"
pubrevision="${project.revision}" />
<ivy:resolve />
<ivy:makepom
ivyfile="${project.generated.ivy.file}"
pomfile="${project.pom.file}"/>
<ivy:publish
resolver="${ivy.omnicache.publisher}"
module="${project.artifact}"
organisation="${project.organisation}"
revision="${project.revision}"
pubrevision="${project.revision}"
pubdate="now"
overwrite="true"
publishivy="true"
status="integration"
artifactspattern="${project.artifact.dir}/[artifact]-[revision](-[classifier]).[ext]"
/>
</target>
一些常春藤文件可以了解内部依赖关系:
XXX-共同项目:
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info
organisation="com.myorg.xxx"
module="xxx_common"
status="integration"
revision="1.0">
</info>
<publications>
<artifact name="xxx_common" type="jar" ext="jar"/>
<artifact name="xxx_common" type="pom" ext="pom"/>
</publications>
<dependencies>
</dependencies>
</ivy-module>
XXX-API项目:
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info
organisation="com.myorg.xxx"
module="xxx_api"
status="integration"
revision="1.0">
</info>
<publications>
<artifact name="xxx_api" type="jar" ext="jar"/>
<artifact name="xxx_api" type="pom" ext="pom"/>
</publications>
<dependencies>
<dependency org="com.myorg.xxx" name="xxx_common" rev="1.0" transitive="true" />
</dependencies>
</ivy-module>
IVY Settings.xml:
<ivysettings>
<properties file="${ivy.project.dir}/project.properties" />
<settings
defaultResolver="chain"
defaultConflictManager="all" />
<credentials host="${ivy.credentials.host}" realm="Sonatype Nexus Repository Manager" username="${ivy.credentials.username}" passwd="${ivy.credentials.passwd}" />
<caches>
<cache name="ivy.cache" basedir="${ivy.cache.dir}" />
</caches>
<resolvers>
<ibiblio name="xxx_publisher" m2compatible="true" root="${ivy.xxx.publish.url}" />
<chain name="chain">
<url name="xxx">
<ivy pattern="${ivy.xxx.repo.url}/com/myorg/xxx/[module]/[revision]/ivy-[revision].xml" />
<artifact pattern="${ivy.xxx.repo.url}/com/myorg/xxx/[module]/[revision]/[artifact]-[revision].[ext]" />
</url>
<ibiblio name="xxx" m2compatible="true" root="${ivy.xxx.repo.url}"/>
<ibiblio name="public" m2compatible="true" root="${ivy.master.repo.url}" />
<url name="com.springsource.repository.bundles.release">
<ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
<artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
</url>
<url name="com.springsource.repository.bundles.external">
<ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
<artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
</url>
</chain>
</resolvers>
</ivysettings>
答案 0 :(得分:3)
w00h00t。
(向全世界寻求帮助有一些宣传。通常你会更快地解决问题,即使没有回应)。
无论如何,对于感兴趣的人来说,它归结为以下几点:
a)在所有修订版中添加-SNAPSHOT。这包括分叉第二个ivy.xml - &gt; ivy.SNAPSHOT.xml并在常春藤ant任务中明确引用它。
b)鉴于这是一个手动添加,我必须浏览整个构建文件树,并为发布和快照流提供并行路径。在我看来,这是蹩脚的。但是,正如我猜我们极不可能发明任何其他类型的流量,这可能不会膨胀,并且2个并行流量将保持不变。
c)我为常春藤指定了各种提示,以检查快照的更新。例如解析器上的checkUpdated="true"
和changePattern=".*-SNAPSHOT"
。而且还增加了
<modules org="myorg" name=*" resolveMode="dynamic" />
但是,如果已经与快照内容自动集成,那就太好了。常春藤的(可选)聪明的位。让我们面对现实,像nexus这样的maven repos非常有用,而且我肯定只使用常春藤来绕过maven的糟糕构建过程。我喜欢使用nexus。
反正。如果有人想对此进一步提出质疑,请随意。
答案 1 :(得分:1)
我不确定这是否有助于解决有两组配置的问题,但至少build.xml会更简单一些。
您可以将ivy.xml中info元素的revision属性定义为$ {project.revision}。
然后,您可以省略build.xml中常春藤元素的revision =“$ {project.revision}”属性。
例如,在另一个问题上查看我的答案: https://stackoverflow.com/a/8853823/1148030
答案 2 :(得分:0)
应该注意,唯一必要的步骤是在发布到Nexus时包含'-SNAPSHOT'进行修订。答案中列出的其他步骤是可选/改进。要删除已发布的项目,您还需要在修订中添加“-SNAPSHOT”。