Ivy: ¿cómo elimino las dependencias transitivas?

votos
18

Estoy usando Ivy para administrar las dependencias de mi proyecto.

Hasta ahora, he especificado una dependencia en Hibernate y servlet-api. Sin embargo, el contenedor de hibernación tiene muchas dependencias que realmente no son necesarias, como jaas y jacc .

Esto se convierte en un obstáculo para mostrar porque jaas y jaac son bibliotecas de Sun y, por lo tanto, sus licencias prohíben colocarlas en los repositorios de Maven, por lo que Ivy no puede encontrarlas allí.

  • ¿Cómo hago para que Ivy descargue Hibernate pero no estos dos?
  • Como beneficio adicional, si realmente los necesitaba y descargué sus tarros de Sun, ¿en qué carpeta de mi máquina Ivy los buscaría?
Publicado el 28/01/2009 a las 11:48
por usuario
En otros idiomas...                            


4 respuestas

votos
18

¿Cómo hago para que Ivy descargue Hibernate pero no estos dos?

Ivy hace esto usando lo que llama "configuraciones". Tu ivy.xmlque representa a Hibernate tendrá que proporcionar diferentes configuraciones para representar diferentes casos de uso para hibernar. (Obviamente, hay un cierto uso de hibernación que requiere jaas y jacc, pero aparentemente no se usa ese caso).

Aquí está la documentación sobre configuraciones. Si desea proporcionar el ivy.xmlque está utilizando para la hibernación, puedo proporcionar consejos sobre la creación de configuraciones que eliminen las bibliotecas específicas que desea eliminar.

Si realmente los necesitaba y descargué sus Tarros de Sun, ¿en qué carpeta de mi máquina Ivy los buscaría?

Los "directorios" que hied busca en hiedra archivos y artefactos se especifican en la lista de resolvers que está utilizando. La lista de resolutores se especifica en el archivo de configuración de ivy (generalmente nombrado ivysettings.xml). Normalmente, estos no son directorios locales, sino URL remotas. Ahi esta; sin embargo, un tipo de resolución de archivos locales que funcionará para esto.

Si hace esto, deberá proporcionar tanto los archivos ivy como los artefactos (jarras), cada uno con nombres de archivos que coincidan con los patrones de resolución. Los detalles sobre eso están en la documentación.

Aquí hay un ejemplo de resolución de archivos locales de un archivo de configuración de hiedra:

<filesystem name="myfiles" checkconsistency="false" checksums="" transactional="false">
   <ivy pattern="/data/repo/[organisation]/[module]-[revision].ivy.xml"/>
   <artifact pattern="/data/repo/[organisation]/[module]-[revision].[ext]"/>
</filesystem>

También tenga en cuenta que tendrá que apuntar sus tareas de hiedra a la resolución correcta. Puede hacerlo con el atributo resolver en las tareas ant, o con el defaultResolveratributo en el settingselemento en el archivo de configuración ivy.

Aquí está la documentación sobre los resolutores.

EDITAR: El OP encontró una solución menos intensiva para su problema original específico. La etiqueta secundaria "excluir" de la etiqueta de dependencia le hizo el trabajo:

<dependencies>  
   <dependency org="org.hibernate" name="hibernate-core" rev="3.3.1.GA" conf='..'> 
       <exclude name='jaas' /> 
       <exclude name='jacc' />
   </dependency>
</dependencies>
Respondida el 30/01/2009 a las 20:04
fuente por usuario

votos
23

Otra opción para no descargar ninguna dependencia es deshabilitarlas con el transitiveatributo. Entonces, si quisiera hibernate-core, pero ninguna de sus dependencias, podría hacer esto:

<dependencies>  
   <dependency org="org.hibernate" name="hibernate-core"
               rev="3.3.1.GA" conf='..'
               transitive="false" /> 
</dependencies>
Respondida el 18/04/2009 a las 03:04
fuente por usuario

votos
0

Al navegar por la web y los blogs, encontré las siguientes configuraciones de hiedra para trabajar en agarrar jaas / jacc e hibernar

<ivysettings>

<settings defaultResolver="chained" checkUpToDate="true" />

<resolvers>
    <chain name="chained">
        <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>

        <ibiblio name="ibiblio" m2compatible="true"/>

        <ibiblio name="jboss" root="http://repository.jboss.org/maven2/" m2compatible="true"/>

        <ibiblio name="java-net-maven1" root="http://download.java.net/maven/1" pattern="${java.net.maven.pattern}" m2compatible="false"/>

        <ibiblio name="java-net-maven2" root="http://download.java.net/maven/2/" m2compatible="true"/>

        <ibiblio name="compass" m2compatible="true" root="http://repo.compass-project.org" />

    </chain>

</resolvers>

El solucionador jboss ibibilio es lo que hizo el truco en agarrar JAAS / JAAC

Mi ivy.xml luego puede sacarlo con

<ivy-module version="2.0">

<info organisation="foo" module="Bar"/>
<dependencies>

    <dependency org="com.h2database" name="h2" rev="1.2+"/>

    <dependency org="org.hibernate" name="hibernate-annotations" rev="3.4.0.GA"/>     

</dependencies>

Respondida el 29/11/2009 a las 01:42
fuente por usuario

votos
0

Para responder a su segunda cuestión parcial , literalmente , que nadie ha hecho hasta ahora "en el que la carpeta en mi máquina sería Ivy buscar un frasco?" Eso depende. Suponiendo que no haya cambiado la ubicación en ivysettings.xml u otro archivo de configuración: para JAAS, esto sería: ( inicio del usuario ) / Ivy2 / cache / javax.security / jaas / frascos.. Si Ivy ya intentó sin éxito encontrar JAAS en el central de Maven o de otro tipo de pases pasivos, ese árbol de directorios ya debe existir en su mayor parte, y todo lo que hay que hacer es crear el "tarros" directorio y lugar jaas-1.0.01.jar en eso. Ivy ya no se quejan de la falta de dependencia en su siguiente llamada.

EDIT: Por otra parte, véase la discusión abajo para ver las consideraciones de no hacerlo de esta manera.

(( Inicio del usuario ) es C: / Users / ( nombre de usuario ) en Windows 7).

Respondida el 08/02/2012 a las 15:00
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more