2016-06-23 14 views
1

Ich möchte einen 3rd-Party-Satz von Bibliotheken für nexus bereitstellen, nachdem ich sie mit maven aus der Quelle erstellt habe.Wie stelle ich einen 3rd-Party-Satz von Bibliotheken für Nexus bereit?

Ich dachte, ich wäre in der Lage einfach mvn deploy zu verwenden, aber ich bekomme die folgende Meldung:

[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ dcm4che-parent --- 
Uploading: scp://www.dcm4che.org:443/home/maven2/org/dcm4che/dcm4che-parent/3.3.7/dcm4che-parent-3.3.7.pom 
The authenticity of host 'www.dcm4che.org' can't be established. 
RSA key fingerprint is 41:7f:10:be:8d:15:30:f1:91:59:95:c7:5d:63:f7:31. 
Are you sure you want to continue connecting? (yes/no): yes 
Password: : 

Dies ist für mich sieht aus wie es auf den www.dcm4che.org einzusetzen versucht, und nicht mein Nexus Repo .

Kann ich mvn deploy auf diese Weise nicht verwenden?

Ich kann meine eigenen libs zu Nexus auf diese Weise ohne Probleme bereitstellen.

Was mache ich falsch?

UPDATE

Nach Anschluss an die Beratung in this answer ausgeführt ich den folgenden Befehl ein:

mvn deploy -DaltDeploymentRepository=nexus::default::http://192.168.50.200:8081/nexus/content/repositories/thirdparty 

und ich erhalte den folgenden Fehler:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project dcm4che-parent: Failed to deploy artifacts: Could not transfer artifact org.dcm4che:dcm4che-parent:pom:3.3.7 from/to nexus (http://192.168.50.200:8081/nexus/content/repositories/thirdparty): Failed to transfer file: http://192.168.50.200:8081/nexus/content/repositories/thirdparty/org/dcm4che/dcm4che-parent/3.3.7/dcm4che-parent-3.3.7.pom. Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1] 

Ich habe einen Eintrag hinzugefügt meine settings.xml wie folgt:

<servers> 
    <server> 
     <id>thirdparty</id> 
     <username>deployment</username> 
     <password>password</password> 
     <configuration></configuration> 
    </server> 
</servers> 

2. UPDATE

ich die folgende Befehlszeile Variationen versucht haben, aber noch kann sie nicht zu arbeiten. Die Maven Dokumentation ist keine Hilfe.

mvn deploy -DaltDeploymentRepository=thirdparty::default::http://192.168.50.200:8081 

erzeugt den Fehler:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project dcm4che-parent: Failed to deploy artifacts: Could not find artifact org.dcm4che:dcm4che-parent:pom:3.3.7 in thirdparty (http://192.168.50.200:8081) -> [Help 1] 

und

mvn deploy -DaltDeploymentRepository=thirdparty::default::http://192.168.50.200:8081/nexus/ 

erzeugt den Fehler:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project dcm4che-parent: Failed to deploy artifacts: Could not transfer artifact org.dcm4che:dcm4che-parent:pom:3.3.7 from/to thirdparty (http://192.168.50.200:8081/nexus/): Failed to transfer file: http://192.168.50.200:8081/nexus/org/dcm4che/dcm4che-parent/3.3.7/dcm4che-parent-3.3.7.pom. Return code is: 405, ReasonPhrase: HTTP method PUT is not supported by this URL. -> [Help 1] 

und

mvn deploy -DaltDeploymentRepository=nexus::default::http://192.168.50.200:8081/nexus/content/repositories/ 

den Fehler produziert:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project dcm4che-parent: Failed to deploy artifacts: Could not find artifact org.dcm4che:dcm4che-parent:pom:3.3.7 in nexus (http://192.168.50.200:8081/nexus/content/repositories/) -> [Help 1] 

Finale UPDATE

Für alle anderen, die über diese stolpern könnte, den folgenden Befehl gearbeitet. Danke an A_Di-Matteo für seine Hilfe.

mvn deploy -DaltDeploymentRepository=thirdparty::default::http://192.168.50.200:8081/nexus/content/repositories/thirdparty 
+0

Zuerst habe ich Zweifel, dass die Verwendung von 'scp' als Protokoll eine gute Idee ist und normalerweise auch nicht von Nexus verwendet wird. (http/https) wird verwendet. Außerdem müssen Sie die DistributionManagement irgendwo in pom.xml ändern .... – khmarbaise

+0

Ich weiß nicht, wo oder wie 'scp' in die Bereitstellung kommt. Es ist nichts, was ich wissentlich angegeben habe. – ksl

+0

@ksl die ID in Ihren Einstellungen Snippet ist 'ThirdParty' während von der Befehlszeile Sie' Nexus' übergeben, das ist eine Abweichung –

Antwort

1

Sie sich beziehen wahrscheinlich auf die dcm4che-parent-3.3.7.pom Artefakt, von denen:

<distributionManagement> 
    <repository> 
     <id>www.dcm4che.org</id> 
     <name>dcm4che Repository</name> 
     <url>scp://www.dcm4che.org:443/home/maven2</url> 
    </repository> 
</distributionManagement> 

Wie Sie sehen können, seine distributionManagement wird was sich auf die Host in der Buildfehler genannt, die als Standard verwendet wird, ein.

Wenn Sie Ihre internen Nexus bereitstellen möchten, sollten Sie dann verwenden, um die altDeploymentRepository Option:

Specifies an alternative repository to which the project artifacts should be deployed (other than those specified in <distributionManagement>). Format: id::layout::url .

Die Benutzereigenschaft ist altDeploymentRepository.

Daher können Sie Maven wie folgt aufrufen:

mvn clean deploy -DaltDeploymentRepository=yourId::layout::URL 

Welche ein Repository in Ihrem Maven settings.xml angegebenen übereinstimmen sollte.


Als allgemeine Regel sollten Sie nicht laden öffentliche Artefakte auf diese Weise Nexus: Nexus sie für Sie abrufen können und für andere Remote-Repositories als weitere zentrale Cache/Governance Punkt verwendet werden.

Wenn Sie öffentliche Artefakte ändern und sie dann in Ihrem internen Nexus veröffentlichen, dann ist es ratsam, ihre Maven coordinates zu ändern, mindestens eine classifier hinzuzufügen, die etwas zu Ihrem Patch/Firmenname/nützliche Details angibt.

+0

Also sollte ich einfach den dcm4che repo zu meiner nexus config hinzufügen? Und wenn ich meine Anwendung baue, die von dcm4che abhängig ist, wird maven in sich ziehen, was es davon braucht, und es dann aufbauen? – ksl

+0

@ksl Ja, das ist der empfohlene Ansatz, Sie müssen nicht jede externe Abhängigkeit hochladen, die Sie benötigen. Nexus wird sie für Sie ziehen und in seinem Cache speichern. –