gpt4 book ai didi

java - 将 Maven Artifact 发布到本地 Ivy 存储库,递归地及其依赖项

转载 作者:行者123 更新时间:2023-11-29 09:30:24 24 4
gpt4 key购买 nike

我必须将一组依赖项镜像到我公司本地的 Ivy 存储库。

我目前需要发布 Hibernate Spatial 4.0-M1 .在我的 Eclipse 项目中,如果启用远程存储库,我只能解决 Ivy 依赖项 <ibiblio name="hibernate-spatial" m2compatible="true" root="http://www.hibernatespatial.org/repository"/> (并从 dependencies.xml 中排除一些依赖项),其他开发人员没有这些依赖项,因为他们只能从 LAN 中检索。

所以我最终将 JAR 放入发布目录,使用适当的 Ant 任务将 HS 官方 POM 转换为 Ivy,最后我得到了以下 dependencies.xml

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="1.0" xmlns:m="http://ant.apache.org/ivy/maven">
<info organisation="org.hibernate"
module="hibernate-spatial"
revision="4.0-M1"
status="release"
publication="20130904175525"
>
<description homepage="" />
</info>
<configurations>
<conf name="default" visibility="public" description="runtime dependencies and master artifact can be used with this conf" extends="runtime,master"/>
<conf name="master" visibility="public" description="contains only the artifact published by this module itself, with no transitive dependencies"/>
<conf name="compile" visibility="public" description="this is the default scope, used if none is specified. Compile dependencies are available in all classpaths."/>
<conf name="provided" visibility="public" description="this is much like compile, but indicates you expect the JDK or a container to provide it. It is only available on the compilation classpath, and is not transitive."/>
<conf name="runtime" visibility="public" description="this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath." extends="compile"/>
<conf name="test" visibility="private" description="this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases." extends="runtime"/>
<conf name="system" visibility="public" description="this scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository."/>
<conf name="sources" visibility="public" description="this configuration contains the source artifact of this module, if any."/>
<conf name="javadoc" visibility="public" description="this configuration contains the javadoc artifact of this module, if any."/>
<conf name="optional" visibility="public" description="contains all optional dependencies"/>
</configurations>
<publications>
<artifact name="hibernate-spatial" type="jar" ext="jar" conf="compile"/>
</publications>
<dependencies>
<dependency org="jaxen" name="jaxen" rev="1.1" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="junit" name="junit" rev="4.8.2" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="commons-logging" name="commons-logging-api" rev="99.0-does-not-exist" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.1" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="postgresql" name="postgresql" rev="8.4-701.jdbc4" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="org.slf4j" name="jcl-over-slf4j" rev="1.6.1" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="javax.validation" name="validation-api" rev="1.0.0.GA" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="dom4j" name="dom4j" rev="1.6.1" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<!--<dependency org="org.postgis" name="postgis-jdbc" rev="1.5.3" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>-->
<dependency org="org.hibernate" name="hibernate-validator" rev="4.2.0.Final" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="org.slf4j" name="slf4j-api" rev="1.6.1" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="commons-dbcp" name="commons-dbcp" rev="1.4" force="true" conf="test->runtime(*),master(*)"/>
<!--<dependency org="org.jboss.logging" name="jboss-logging" rev="3.1.0.CR2" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>-->
<dependency org="com.fasterxml" name="classmate" rev="0.5.4" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="commons-logging" name="commons-logging" rev="99.0-does-not-exist" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="org.jboss" name="jandex" rev="1.0.3.Final" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="org.hibernate" name="hibernate-core" rev="4.0.0.Final" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="org.hibernate" name="hibernate-testing" rev="4.0.0.Final" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="com.vividsolutions" name="jts" rev="1.12" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/>
<dependency org="com.h2database" name="h2" rev="1.2.145" force="true" conf="test->runtime(*),master(*)"/>
<!--<dependency org="javassist" name="javassist" rev="3.12.1.GA" force="true" conf="test->runtime(*),master(*)"/>-->
</dependencies>
</ivy-module>

我运行以下 Ant 任务:

<target name="ivy-local-release" depends="ivy-config" description="Locally publish a file">
<ivy:resolve />
<ivy:publish artifactspattern="${ivy.install.dir}/publish/[artifact]-[revision].[ext]" resolver="local" status="release" overwrite="true" />
</target>

我得到以下输出:

ivy-config:
[ivy:configure] :: Ivy 2.1.0 - 20090925235825 :: http://ant.apache.org/ivy/ ::
[ivy:configure] :: loading settings :: file = C:\Program Files (x86)\Ivy\ivy-settings.xml
ivy-local-release:
[ivy:resolve] :: resolving dependencies :: org.hibernate#hibernate-spatial;4.0-M1
[ivy:resolve] confs: [default, master, compile, provided, runtime, test, system, sources, javadoc, optional]
[ivy:resolve] found postgresql#postgresql;8.4-701.jdbc4 in maven2
[ivy:resolve] found dom4j#dom4j;1.6.1 in local
[ivy:resolve] found xml-apis#xml-apis;1.0.b2 in maven2
[ivy:resolve] found org.hibernate#hibernate-core;4.0.0.Final in maven2
[ivy:resolve] found commons-collections#commons-collections;3.2.1 in local
[ivy:resolve] found antlr#antlr;2.7.7 in local
[ivy:resolve] found org.jboss.spec.javax.transaction#jboss-transaction-api_1.1_spec;1.0.0.Final in local
[ivy:resolve] found org.hibernate.javax.persistence#hibernate-jpa-2.0-api;1.0.1.Final in maven2
[ivy:resolve] found org.jboss.logging#jboss-logging;3.1.0.CR2 in maven2

[...]

[ivy:resolve] ==== jboss: tried
[ivy:resolve] https://repository.jboss.org/nexus/content/repositories/releases/gnu-getopt/getopt/1.0.13/getopt-1.0.13.pom
[ivy:resolve] -- artifact gnu-getopt#getopt;1.0.13!getopt.jar:
[ivy:resolve] https://repository.jboss.org/nexus/content/repositories/releases/gnu-getopt/getopt/1.0.13/getopt-1.0.13.jar
[ivy:resolve] ==== shared: tried
[ivy:resolve] R:/repository/gnu-getopt/getopt/1.0.13/ivys/ivy.xml
[ivy:resolve] -- artifact gnu-getopt#getopt;1.0.13!getopt.jar:
[ivy:resolve] R:/repository/gnu-getopt/getopt/1.0.13/jars/getopt.jar
[ivy:resolve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve] :: UNRESOLVED DEPENDENCIES ::
[ivy:resolve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve] :: commons-logging#commons-logging-api;99.0-does-not-exist: not found
[ivy:resolve] :: commons-logging#commons-logging;99.0-does-not-exist: not found
[ivy:resolve] :: commons-httpclient#commons-httpclient;3.1-jbossorg-1: not found
[ivy:resolve] :: org.hornetq#hornetq-core;working@antonioanzivino: not found
[ivy:resolve] :: org.jboss.netty#netty;working@antonioanzivino: not found
[ivy:resolve] :: jacorb#jacorb;2.3.1jboss.patch01-brew: not found
[ivy:resolve] :: jacorb#idl;2.3.1jboss.patch01-brew: not found
[ivy:resolve] :: org.jboss.logmanager#jboss-logmanager;working@antonioanzivino: not found
[ivy:resolve] :: org.jboss.integration#jboss-transaction-spi;working@antonioanzivino: not found
[ivy:resolve] :: org.jboss.spec.javax.ejb#jboss-ejb-api_3.1_spec;working@antonioanzivino: not found
[ivy:resolve] :: org.jboss.spec.javax.servlet#jboss-servlet-api_3.0_spec;working@antonioanzivino: not found
[ivy:resolve] :: ${project.parent.groupId}#jboss-logging-generator;1.0.0.Beta6: not found
[ivy:resolve] :: org.jboss.ws#jbossws-api;1.0.0-SNAPSHOT: not found
[ivy:resolve] :: gnu-getopt#getopt;1.0.13: not found
[ivy:resolve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve]
[ivy:resolve]
[ivy:resolve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS

BUILD FAILED

我在 ivy-settings.xml 中使用了以下解析器配置

    <resolvers>
<filesystem name="shared" >
<ivy pattern="${ivy.shared.default.root}/${ivy.shared.default.ivy.pattern}" />
<artifact pattern="${ivy.shared.default.root}/${ivy.shared.default.artifact.pattern}" />
</filesystem>
<ibiblio name="maven2" m2compatible="true"/>
<ibiblio name="geotools" m2compatible="true" root="http://download.osgeo.org/webdav/geotools"/>
<ibiblio name="hibernate-spatial" m2compatible="true" root="http://www.hibernatespatial.org/repository"/>
<ibiblio name="jboss" m2compatible="true" root="https://repository.jboss.org/nexus/content/repositories/releases/"/>
<ibiblio name="mavenjava" m2compatible="true" root="http://download.java.net/maven/2" />
</resolvers>
<resolvers>
<chain name="default" returnFirst="false">
<resolver ref="local" />
<resolver ref="maven2" />
<resolver ref="geotools" />
<resolver ref="hibernate-spatial" />
<resolver ref="jboss" />
<resolver ref="shared" />

</chain>
</resolvers>

奇怪的是,当我运行ivy:resolve 时,我可以解决所有的依赖关系。在我的本地项目上。

我想在发布新 Artifact 时递归地发布对本地 Ivy 存储库的依赖项。如何做到这一点?

最佳答案

它必须 Ivy 吗?在内部托管依赖项的更好选择是设置 Maven 存储库管理器,如 Nexus .然后将从自动检索 Maven Central 等外部存储库并在本地缓存。

如果您决定使用 Ivy ,我建议您查看 ivy install task .

关于java - 将 Maven Artifact 发布到本地 Ivy 存储库,递归地及其依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18634590/

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