2012-04-17 21 views
5

Ho cercato in giro per anni cercando di trovare una soluzione al mio problema, ma tutti gli altri post che ho trovato non funzionano o non corrispondono al mio situazione, quindi spero che qualcuno possa darmi qualche intuizione.Come scaricare Ivy per scaricare fonti dal repository Nexus

Ho una libreria con la quale sono stato creato, che emette 2 file jar, uno come normale contenente la versione compilata della libreria e un altro contenente solo i file sorgente.

Questa libreria viene caricata nel nostro repository Nexus con la confezione impostata su jar. Per il file jar effettivo ho impostato l'estensione su jar e lascia vuoto il classificatore. Per il jar sorgente ho impostato il classificatore alle fonti e l'estensione al jar.

Non importa quello che faccio con il mio file ivy.xml Non riesco a farlo scaricare il vaso dei sorgenti. Sulla base di messaggi che ho letto altrove ho provato ad aggiungere:

conf="*->default,sources" 

alla mia dipendenza, ma poi ho un errore:

configuration not found in org#name;version: 'sources' 

Quindi questo è fondamentalmente aspetta la mia libreria per definire fonti come configurazione da qualche parte ? Ho pensato che avrebbe solo preso atto del fatto che esiste un altro artefatto con il classificatore impostato su fonti nel repository.

Qualcuno può darmi altri suggerimenti su cosa potrei fare male sia con il modo in cui ho pubblicato la mia libreria su Nexus, sia con come ho impostato la mia dichiarazione di dipendenza nel mio file Ivy.

Questo è il file Ivy.xml di base in cui sto definendo la mia dipendenza dalla libreria che ho inserito in Nexus.

<ivy-module version="2.0"> 

    <info organisation="${ivy.organisation}" module="moduleName" /> 

    <configurations> 
     <conf name="pda" description="moduleName for PDA"/> 
     <conf name="server" description="moduleName for server"/> 
    </configurations> 

    <dependencies> 
     <!-- Internal --> 
     <dependency name="utility" org="${ivy.organisation}" rev="latest.integration" conf="${ivy.configuration}"/> 
     <dependency name="myLib" org="my.org" rev="0.0.+"/> 
    </dependencies> 

</ivy-module> 

In risposta ai commenti qui sotto, la proprietà ivy.configuration è impostato su PDA dentro le mie build.properties per Ant. Per Eclipse ho creato un file delle proprietà e impostato ivy.configuration su pda (questo file delle proprietà viene quindi referenziato nelle impostazioni Ivy all'interno di Eclipse).

Il messaggio di errore che ottengo è:

Some projects fail to be resolved 
    Impossible to resolve dependencies of ${ivy.organisation}#moduleName;[email protected] 
     unresolved dependency: my.org#myLib;0.0.+: configuration not found in my.org#myLib;0.0.0: 'sources'. It was required from ${ivy.organisation}#moduleName;[email protected] pda 

UPDATE Ecco il file ivy.xml risolto:

<?xml version="1.0" encoding="UTF-8"?> 
<ivy-module version="2.0"> 
    <info organisation="my.org" 
     module="myLib" 
     revision="0.0.0" 
     status="release" 
     publication="20120419131909" 
     default="true" 
    /> 
    <configurations> 
     <conf name="default" visibility="public"/> 
    </configurations> 
    <publications> 
     <artifact name="myLib" type="jar" ext="jar" conf="default"/> 
    </publications> 
</ivy-module> 

Questo spiega il motivo per cui, ovviamente, non riesce a trovare il 'fonti' conf. Ma avevo l'impressione che le fonti conf dovrebbero essere aggiunte automaticamente perché ho aggiunto le fonti a Nexus.

+0

puoi stampare il tuo ivy.xml? – Matt

+0

Per il file ivy precedente, specifica quale configurazione eseguire nel mio file delle proprietà della formica o utilizzando IvyDE in Eclipse (e nel mio caso è la configurazione PDA che sto eseguendo) – DaveJohnston

+0

@DaveJohnston l'ho letto correttamente? non usi l'attività di pubblicazione di edera, ma copi manualmente i file e il file ivy.xml sopra nel repository? Se questo è il tuo ivy.xml manca i tag di pubblicazione, che sono necessari per il recupero. – oers

risposta

2

Così, dopo un sacco di suonare in giro mi sembra di finalmente avere una soluzione a questo. Se io dichiaro la mia dipendenza nel seguente modo:

<dependency name="myLib" org="my.org" rev="0.0.+"> 
    <artifact type="jar"/> 
    <artifact type="source" m:classifier="sources" conf="pdaDev->sources"/> 
</dependency> 

allora posso aggiungere una nuova configurazione (ad esempio pdaDev sopra) che collega alle fonti di configurazione della dipendenza. Quando uso Eclipse, posso dire di usare la config di pdaDev e lo fa anche nel jar sorgente (se esiste).

Sembra strano che Nexus non sembri includere la configurazione dei sorgenti nel file Ivy risolto a meno che non venga richiesto esplicitamente come ho fatto sopra.

0

Creare due configurazioni nel file ivy. Uno per i binari che dovrebbero essere sul classpath l'altro per i vasi di origine.

secondo luogo, creare due mapping configurazione sulla dipendenza:

<ivy-module version="2.0"> 
    <info organisation="org.demo" module="demo"/> 
    <configurations> 
     <conf name="compile" description="jars used for compilation classpath"/> 
     <conf name="sources" description="Source jars"/> 
    </configurations> 
    <dependencies> 
     <dependency org="org.slf4j" name="slf4j-simple" rev="1.6.4" conf="compile->default;sources->sources"/> 
    </dependencies> 
</ivy-module> 

NOTA:

Entro il vostro costruire ANT è possibile utilizzare le configurazioni come segue:

<target name="init"> 
    <ivy:resolve/> 

    <!-- Populate a compile classpath for use with javac task --> 
    <ivy:cachepath pathid="compile.path" conf="compile"/> 

    <!-- Put source jars in the src directory --> 
    <ivy:retrieve pattern="src/[artifact]-[revision](-[classifier]).[ext]" conf="sources"/> 

</target> 
+0

Questo è più o meno quello che ho già provato, ma si lamenta che i sorgenti di conf non si trovano nella mia dipendenza. C'è qualcosa che devo fare alla mia dipendenza quando la aggiungo a nexus per aggiungere la configurazione dei sorgenti? Ho pensato che lo avrebbe fatto automaticamente aggiungendo un artefatto con le sorgenti del classificatore. – DaveJohnston

+0

La configurazione "fonti" dovrebbe essere disponibile in tutti i moduli Maven remoti (vedere il collegamento nella mia risposta sopra). Potresti aggiornare il tuo post con l'errore che stai ottenendo? Inoltre devi dirmi il tuo mapping di configurazione (valore della proprietà ivy.configuration) .... Fondamentalmente, attualmente non so come riprodurre il tuo problema ... –

+0

Ho modificato la mia domanda con il messaggio di errore che ho ottieni e i valori di configurazione. – DaveJohnston

2

si dovrebbe dire Ivy sulle configurazioni quando si pubblica artefatti. Ad esempio:

<ivy-module version="2.0"> 
    <info organisation="apache" module="commons-lang" revision="2.5" status="release"/> 
    <configurations> 
     <conf name="binary" description="provide only binary files"/> 
     <conf name="development" extends="binary" description="provide binary files with javadoc and sources"/> 
    </configurations> 
    <publications> 
     <artifact name="commons-lang" ext="jar" conf="binary" type="jar"/> 
     <artifact name="commons-lang-javadoc" ext="jar" conf="development" type="javadoc"/> 
     <artifact name="commons-lang-sources" ext="jar" conf="development" type="source"/> 
    </publications> 
</ivy-module> 

Come si può vedere, commons-lang.jar è pubblicato in configurazione binaria. Ma commons-lang-sources e commons-lang-javadoc pubblicati sotto configurazione di sviluppo.

quando si recuperano le dipendenze si dovrebbe utilizzare il seguente ivy.xml:

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> 
    <info organisation="bitrete" module="strongpoint" status="development"/> 
    <configurations> 
     <conf name="binary" description="provide only binary files"/> 
     <conf name="development" extends="binary" description="provide binary files with javadoc and sources"/> 
    </configurations> 
    <publications> 
     <artifact name="strongpoint" ext="jar" type="jar"/> 
    </publications> 
    <dependencies> 
     <dependency org="apache" name="commons-lang" rev="2.5"/> 
    </dependencies> 
</ivy-module> 

e fornire configurazione desiderata quando si risolve con Ant:

<property name="ivy.conf" value="binary"/> 
... 
<property name="ivy.conf" value="development"/> 
... 
<ivy:resolve conf="${ivy.conf}"/> 
+0

Ma come faccio a pubblicare queste informazioni di configurazione su un repository Nexus? Finora ho pubblicato gli artefatti usando Ant, quindi caricandoli manualmente su Nexus. Ciò comporta la selezione dei file che appartengono alla libreria e l'assegnazione di un classificatore (ad esempio, fonti). Allora, dov'è l'informazione sulla configurazione della libreria memorizzata in Nexus? – DaveJohnston

Problemi correlati