2013-09-05 2 views
2

Я должен отразить набор зависимостей в моем локальном репозитории Ivy.Публикация артефакта Maven в локальный репозиторий Ivy, рекурсивно с его зависимостями

Мне сейчас нужно опубликовать Hibernate Spatial 4.0-M1. Из моего проекта Eclipse я могу разрешать только зависимости Ivy, если я включаю удаленный репозиторий <ibiblio name="hibernate-spatial" m2compatible="true" root="http://www.hibernatespatial.org/repository"/> (и исключаю несколько зависимостей от dependencies.xml), которые другие разработчики не имеют, поскольку они извлекают только из локальной сети.

Так что я в конечном итоге положить JAR в каталог публикации, конвертировать официальный POM HS в Ivy с помощью надлежащей Ant задачи, и я закончил со следующими 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;[email protected]: not found 
[ivy:resolve]  :: org.jboss.netty#netty;[email protected]: 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;[email protected]: not found 
[ivy:resolve]  :: org.jboss.integration#jboss-transaction-spi;[email protected]: not found 
[ivy:resolve]  :: org.jboss.spec.javax.ejb#jboss-ejb-api_3.1_spec;[email protected]: not found 
[ivy:resolve]  :: org.jboss.spec.javax.servlet#jboss-servlet-api_3.0_spec;[email protected]: 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 при публикации нового артефакта. Как это сделать?

ответ

0

Должен ли он иметь плющ? Лучший вариант для размещения зависимостей внутри - это настроить диспетчер хранилища Maven, например Nexus. Внешние репозитории, такие как Maven Central, будут автоматически извлекаться и кэшироваться локально.

Если вы решили использовать плющ, я бы рекомендовал посмотреть на ivy install task.

+0

Да, это ** должно быть плюсом, потому что вся компания использует Айви, и у меня нет контроля или обсуждения над этим. –

+0

@djechelon. Все в порядке, но не забывайте, что плющ имеет ибиблейский резольвер, который совместимый с Maven repoositories. Преимущество использования Nexus заключается в том, что он активно управляет вашим репозиторием, с плющом вам придется построить его yourelf. –

Смежные вопросы