que sugeriría la reestructuración de las configuraciones de la siguiente manera:
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="demo"/>
<configurations>
<conf name="compile" description="Libraries needed only for compilation" />
<conf name="runtime" description="Libraries only needed at runtime" extends="compile" />
<conf name="test" description="Libraries only needed for testing" extends="runtime" />
</configurations>
<dependencies>
<dependency org="net.java.dev" name="jvyaml" rev="0.2.1" conf="runtime->default" />
<dependency org="org.apache.solr" name="solr-core" rev="3.6.0" conf="runtime->default" />
</dependencies>
</ivy-module>
cambios importantes introducidos:
- Utilice la configuración de "compilación" más estándar
- Configuración de la herencia utilizando el atributo "extends". Las dependencias de compilación se pueden incluir automáticamente en las configuraciones de tiempo de ejecución y de prueba.
- Utilice las asignaciones de configuración, por ejemplo: conf = "runtime-> default". Esto hace que sea obvio qué configuración local está asociada con qué configuración remota.
asignaciones de configuración explicados
configuraciones son una potente característica de hiedra. Cuando descargas hiedra Maven módulos se realiza una traducción interna y asigna un conjunto estándar de configuraciones, se señalan en esta respuesta:
Cuando se declara una dependencia que es una buena idea para hacer siempre uso de una mapeo de configuración, por lo que no hay duda de dónde se asignan los artefactos de dependencias.
Por ejemplo:
<dependency org="??" name="??" rev="??" conf="runtime->default" />
Aquí estamos diciendo que queremos dependencias predeterminadas del módulo remoto asociados con nuestra configuración de ejecución local.
En la práctica, sólo hay dos asignaciones remotas de configuración que realmente va a necesitar:
- defecto: artefacto del módulo remoto y todas sus dependencias transitivas de tiempo de ejecución
- maestros: el mando a distancia del módulo solo artefacto (sin dependencias transitivas)
En conclusión, creo que su problema fue causado por el hecho de que el remoto del módulo de e Maven alcance "tiempo de ejecución" no incluye el artefacto del módulo Maven, en lugar que estaba recibiendo las dependencias transitivas inexistentes del módulo jvyaml :-(
Algunos consejos adicionales
También me gustaría sugerir que genera una hiedra informe de gestión de la dependencia, de la siguiente manera:
<target name="init" description="Resolve dependencies and populate lib dir">
<ivy:resolve/>
<ivy:report todir="${build.dir}/ivy-report" graph="false"/>
<ivy:retrieve pattern="lib/[conf]/[artifact]-[revision].[ext]"/>
</target>
El informe ayudará a explicar cómo termina cada dependencia arriba en diferentes configuraciones. También es realmente útil para determinar cómo se gestionan las dependencias transitivas.
Y, por último, aquí es donde la herencia de configuración vale la pena, la creación de rutas de clases de hiedra logró ANT:
<target name="init" description="Resolve dependencies and set classpaths">
<ivy:resolve/>
<ivy:report todir="${build.dir}/ivy-report" graph="false"/>
<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="runtime.path" conf="runtime"/>
<ivy:cachepath pathid="test.path" conf="test"/>
</target>
Muchas gracias. Lo explicaste muy bien. He leído un montón de la documentación que incluye esto: http://ant.apache.org/ivy/history/latest-milestone/tutorial/conf.html pero solo salí más confundido. – rainkinz
intercambie la documentación de Apache con esto. gracias @Mark –
Gracias Mark, me lo ha dejado muy claro. +100 –