Domanda

Se dovessi utilizzare una libreria di terze parti che non era nel repository pubblico di Maven, qual è il modo migliore per includerla come dipendenza per il mio progetto in modo che quando qualcun altro controlla il mio codice sarà ancora in grado di crearlo?

cioè.

La mia applicazione "A" dipende dal jar "B" che non esiste nel repository pubblico.Tuttavia, desidero aggiungere "B" come dipendenza da "A" in modo tale che quando una persona dall'altra parte del mondo possa controllare il codice ed essere comunque in grado di creare "A"

È stato utile?

Soluzione

È possibile installare il progetto da soli.

In alternativa, è possibile utilizzare l'ambito system simile al seguente:

<dependency>
    <groupId>org.group.project</groupId>
    <artifactId>Project</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/project-1.0.0.jar</systemPath>
</dependency>

systemPath richiede il percorso assoluto del progetto. Per rendere più facile, se il file jar è all'interno del repository / progetto, è possibile utilizzare la proprietà ${basedir}, che è legato alla radice del progetto.

Altri suggerimenti

Se si dispone di un progetto genitore con un modulo che si trova in questa situazione (richiede una dipendenza non in un repository) è possibile impostare il progetto principale per usare il plugin exec-maven-plugin per auto-installare il file dipendente. Per esempio, ho avuto a che fare questo con il file jar authorize.net in quanto non è disponibile al pubblico.

Parent POM:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <inherited>false</inherited>
            <executions>
                <execution>
                    <id>install-anet</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>mvn</executable>
                <arguments>
                    <argument>install:install-file</argument>
                    <argument>-Dfile=service/lib/anet-java-sdk-1.4.6.jar</argument>
                    <argument>-DgroupId=net.authorize</argument>
                    <argument>-DartifactId=anet-java-sdk</argument>
                    <argument>-Dversion=1.4.6</argument>
                    <argument>-Dpackaging=jar</argument>
                </arguments>
            </configuration>
        </plugin>
    </plugins>
</build>

Nell'esempio precedente, la posizione del vaso si trova nella cartella lib del modulo "servizio".

Quando il modulo di servizio entra nella fase di convalida, il vaso sarà disponibile nel repository locale. È sufficiente fare riferimento a esso nel modo in cui si imposta il groupid, artefatto, ecc nella POM genitore. Ad esempio:

<dependency>
    <groupId>net.authorize</groupId>
    <artifactId>anet-java-sdk</artifactId>
    <version>1.4.6</version>
</dependency>

Utilizzando portata di un sistema può funzionare ma non è consigliato anche nella specifica Maven. non è portatile.

da Maven libro:

  

Sistema- Il campo di applicazione del sistema è simile a condizione tranne che si   sono tenuti a fornire un       percorso esplicito alla JAR sul file system locale. Questo ha lo scopo di consentire la compilazione       contro gli oggetti nativi che possono far parte delle librerie di sistema. Il manufatto si presume       di essere sempre disponibile e non viene cercato in un repository. Se si dichiara lo scopo di       essere sistema, è necessario fornire anche l'elemento SystemPath. Si noti che questo ambito non è       consigliato (si dovrebbe sempre cercare di fare riferimento le dipendenze in un Maven pubblica o personalizzato       repository).

L'approccio migliore è quello di installare sul repository locale o alla vostra repository aziendale per essere accessibile a tutti i vostri coetanei.

questo è molto facile se si utilizza un repository manager come ad esempio Nexus.

In linea generale, si deve prima mettere il barattolo 3rd party nel vostro repository locale. Dopo di che si può utilizzare con l'aggiunta della dipendenza in pom.xml.

Ad esempio.

1.put il barattolo sul suo repository locale prima:

mvn install:install-file -Dfile=<path-to-file>

Nota: questo comando richiede Maven-install-plugin versione 2.5 o successiva. In caso contrario, è possibile fare riferimento a Qui

2.use il barattolo con l'aggiunta della dipendenza in pom.xml vi progetto.
basta aggiungere questo nel pom.xml del progetto:

<dependency>
  <groupId>${the groupId in the jar's pom.xml}</groupId>
  <artifactId>${the artifactId in the jar's pom.xml}</artifactId>
  <version>${the version in the jar's pom.xml}</version>
</dependency>

3.you possono poi confezionare o implementare il progetto eseguendo mvn package o mvn deploy

Il vaso 3rd party sarà anche incluso nel pacchetto.

Se stai utilizzando la suite di strumenti groovy/grail (GGTS) quindi puoi importare direttamente la dipendenza di terze parti (ma assicurati di avere la dipendenza di terze parti nel tuo repository locale) utilizzando i passaggi seguenti:

  1. Vai a Project Explorer e fai clic con il pulsante destro del mouse sul progetto.
  2. Clicca su importare opzione.
  3. Spendi il Esperto di opzione e selezionare Installare o distribuire un artefatto in un repository Maven e fare clic su Avanti.
  4. Sfoglia e seleziona la dipendenza di terze parti utilizzando File degli artefattiopzione e inserisci i dettagli di ID gruppo, ID elemento e versioneutilizzando POM.xml file e fare clic su fine

Aspetta qualche istante e forse l'errore sarebbe andato per quel problema.

Questa soluzione ha funzionato per me; 1. Creato un locale-maven-repo nella directory principale del mio progetto e copiati tutti i miei vasi in 2. eseguito il seguente comando per generare i file necessari pom e metadati, ecc per ogni barattolo che avevo bisogno di usare;

mvn deploy:deploy-file -DgroupId=<somegroupid> -DartifactId=<someartifact> -Dversion=1.0.0 -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=<path to jar file>

Questo ha generato un nuovo file jar con un file pom all'interno del locale-maven-repo e sono stato in grado di includere nel mio progetto come dipendenza come questo;

    <dependency>
        <groupId>somegroupid</groupId>
        <artifactId>someartifact</artifactId>
        <version>1.0.0</version>
    </dependency>

Poi mvn package assicurato che le mie dipendenze del progetto sono risolte e confezionati con il mio file di guerra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top