9

How to perform an upload of a jar via curl the Nexus 3? I tried using the link tips but without success.

Here are my attempts:

curl -v -F r = -F releases hasPom = true and = -F jar -F file = @. / v12.1.0.1 / pom.xml -F file = @. / v12.1.0.1 / ojdbc7.jar -u admin: admin123 http: // localhost: 8081 / repository / maven releases

curl -v -F r = -F releases hasPom = false -F and -F jar = g = com.oracle.jdbc -F = ojdbc7 -F v = 1.0 p = -F jar -F file = @. / v12 .1.0.1 / ojdbc7.jar -u admin: admin123 http: // localhost: 8081 / repository / maven releases

Both have 400 Bad Request.

bfontaine
  • 18,169
  • 13
  • 73
  • 107
douglas.santos
  • 157
  • 1
  • 1
  • 6

3 Answers3

10

Contents of directory

cert_for_nexus.pem

curl.exe

pom.xml

utils-1.0.jar

Nexus v3 is configured for http

curl -v -u admin:admin123 --upload-file pom.xml http://localhost:8081/nexus/repository/maven-releases/org/foo/utils/1.0/utils-1.0.pom

curl -v -u admin:admin123 --upload-file utils-1.0.jar http://localhost:8081/nexus/repository/maven-releases/org/foo/utils/1.0/utils-1.0.jar

Nexus v3 is configured for https

  • prerequisite: must have curl with SSL enabled (link - left menu)

curl -v --cacert cert_for_nexus.pem -u admin:admin123 --upload-file pom.xml https://localhost:8443/nexus/repository/maven-releases/org/foo/utils/1.0/utils-1.0.pom

curl -v --cacert cert_for_nexus.pem -u admin:admin123 --upload-file utils-1.0.jar https://localhost:8443/nexus/repository/maven-releases/org/foo/utils/1.0/utils-1.0.jar

Contents of pom.xml

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.foo</groupId>
  <artifactId>utils</artifactId>
  <version>1</version>
</project>

EDIT: fixed -u order for both https examples

grajsek
  • 856
  • 2
  • 11
  • 24
2

You could use nexus-cli.

docker run -ti -v $(pwd):$(pwd):ro sjeandeaux/nexus-cli:0.2.0 \
                          -repo=http://nexus:8081/repository/maven-releases \
                          -user=admin \
                          -password=admin123 \
                          -file=$(pwd)/upload.jar \
                          -groupID=your.group \
                          -artifactID=yourArtifactID \
                          -version=0.1.0 \
                          -hash md5 \
                          -hash sha1
-2

I've modified your code as below. Please try this.

curl -v -F r=releases -F hasPom=false -F e=jar -F g=com.oracle.jdbc -F a=ojdbc7 -F v=1.0 -F p=jar -F file=@"./v12.1.0.1/ojdbc7.jar" -u admin:admin123 http://localhost:8081/nexus/service/local/artifact/maven/content

Also I would suggest using the full path rather than relative path. Can you share where you are using this curl snippet? Any CI tool like Jenkins?

Gautam Jose
  • 686
  • 8
  • 20
  • 4
    URL "service/local/artifact" is not supported in Nexus v3. – grajsek Oct 19 '16 at 12:03
  • @grajsek can you confirm if this rest end point has been removed in OSS3? I'll change to the same. – Gautam Jose Oct 19 '16 at 13:04
  • The path where the file is uploaded has changed when compared to Nexus 2 - now it's `/repository//` e.g. `/repository/snapshots/com/foo/bar/1.0.0-SNAPSHOT/baz-1.0.0-SNAPSHOT.pom`. See https://support.sonatype.com/hc/en-us/articles/115006744008-How-can-I-programmatically-upload-an-artifact-into-Nexus-3- for details. – David Lukac Feb 20 '18 at 09:44