2

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

我目前需要发布Hibernate Spatial 4.0-M1. <ibiblio name="hibernate-spatial" m2compatible="true" root="http://www.hibernatespatial.org/repository"/>在我的 Eclipse 项目中,如果我启用远程存储库(并从中排除一些依赖项),我只能解决 Ivy 依赖项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奇怪的是,当我在本地项目上运行时,我可以解决所有依赖项。

当我发布一个新的工件时,我想递归地发布对本地 Ivy 存储库的依赖项。怎么做?

4

1 回答 1

-1

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

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

于 2013-09-06T00:40:34.500 回答