質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

4710閲覧

Nexus(snapshotリポジトリ)へのPublish方法

d_tutuz

総合スコア730

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/07/13 12:46

編集2019/07/14 23:02

実現したいこと

jar を Nexus の snapshot リポジトリへ publish したい

実現方法をご存知であれば、ご教示いただきたいです m(_ _)m

詳細

Jenkins Pipeline から Gradle を用いた Java プロジェクトのアーティファクト(jar)を Nexus3 のアーティファクトリポジトリに Publish しようと考えています。(ただし要件上
build.gradlemaven-publish プラグインは用いずに...。 maven-publish を用いて gradle publish とする方法は snapshot リポジトリへ publish できることを確認しています)

Publish は Jenkins のジョブから実行しようと考えています。

snapshot リポジトリ に Publish したいのですが、いろいろ調査/実装してもできませんでした。

調査/確認事項

調べたところ、すでに以下のような Jenkins Plugin があるようです。

ただし、どちらのプラグインも snapshot リポジトリへの Publish はサポートされていないようです。(一応試してみましたが、エラーになりました)

また curl を用いて以下のように JenkinsPipeline スクリプトの中で API を Call しても許可されていませんでした。

jenkinsfile

1 sh "curl -v -u admin:admin123 \ 2 -X POST http://localhost:8081/service/rest/v1/components?repository=maven=snapshots \ 3 -F maven2.groupId=${groupId} \ 4 -F maven2.artifactId=${artifactId} \ 5 -F maven2.version=${version} \ 6 -F maven2.asset1=build/libs/${artifactId}-${version}.jar \ 7 -F maven2.asset1.extension=jar \ 8 -F maven2.asset2=build/libs/${artifactId}-${version}.jar \ 9 -F maven2.asset2.classifier=javadoc \ 10 -F maven2.asset2.extension=jar \ 11 -F maven2.asset3=build/libs/${artifactId}-${version}.jar \ 12 -F maven2.asset3.classifier=sources \ 13 -F maven2.asset3.extension=jar" 14 }

https://support.sonatype.com/hc/en-us/articles/115006744008-How-can-I-programmatically-upload-files-into-Nexus-3-

curl したときのエラーメッセージは以下です。

* Server auth using Basic with user 'admin' > POST /service/rest/v1/components?repository=maven-snapshots HTTP/1.1 > Host: localhost:8081 > Authorization: Basic YWRtaW46YWRtaW4xMjM= > User-Agent: curl/7.55.1 > Accept: */* > Content-Length: 1379 > Expect: 100-continue > Content-Type: multipart/form-data; boundary=------------------------bea51339dc9456fe > < HTTP/1.1 100 Continue } [1379 bytes data] < HTTP/1.1 400 Bad Request < Date: Sat, 13 Jul 2019 11:18:22 GMT < Server: Nexus/3.17.0-01 (OSS) < X-Content-Type-Options: nosniff < Vary: Accept < Content-Type: application/vnd.siesta-validation-errors-v1+json < X-Siesta-FaultId: 2281dcfa-6583-456a-9970-318d54dd431b < Content-Length: 93 * HTTP error before end of send, stop sending < { [93 bytes data] 100 1472 100 93 100 1379 93 1379 0:00:01 --:--:-- 0:00:01 2944 * Closing connection 0 [{"id":"*","message":"Upload to snapshot repositories not supported, use the maven client."}][Pipeline] error

curl した際に得られた Upload to snapshot repositories not supported, use the maven client. というエラーメッセージにあるように、maven client (Gradle の Maven Publish Plugin や Maven の Apache Maven Deploy Plugin) を用いる必要があるのでしょうか?

宜しくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/07/13 13:42

サポートしていませんってエラーがでてるの出てるの貴方のお使いの環境ではスナップショットを利用できません。 URLがループバックドメインなのでサービスのポートできりかえればいいんじゃねの
d_tutuz

2019/07/13 14:56 編集

追記ありがとうございます。 NexusのURLが `localhost:8081` に問題ありそうということでしょうか...?意味が理解できておらず、もう少し詳細にご説明いただけると助かります。
guest

回答1

0

ベストアンサー

エラーメッセージから推察された通りで、http://maven.apache.org/plugins/maven-deploy-plugin/index.html + maven3の環境であれば、snapshot用にタイムスタンプ付きのjarが生成できるようになりました。

As of Maven 3, snapshot artifacts will always be deployed using a timestamped version.

maven-deploy-plugin から実行するのが良いでしょう。

gradle版も可能なようです(未検証)

投稿2019/07/15 01:47

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/07/15 02:32

それをつかわない縛りプレイが欲しいらしい。
d_tutuz

2019/07/15 03:26

A-pZさん、asahina1979さん 回答ありがとうございます! asahina1979さんには意図が正確に伝わらない質問で申し訳ないです。 A-pZさんから回答いただいたように、Jenkins側に maven3 をインストールして、Apache Maven Deploy Plugin の deploy:deploy-file を用いるのが良さそうと考えました。 ビルドは Gradle で実施して、デプロイを mvn deploy:deploy-file で実施することで Jenkins から Nexus3 に Publish できること確認できました。 ---------------------------------------------------------- sh "mvn deploy:deploy-file \ -DgroupId=${groupId} \ -DartifactId=${artifactId} \ -Dversion=${appVersion} \ -DgeneratePom=false \ -Dpackaging=jar \ -DrepositoryId=nexus-snapshots \ -Durl=http://admin:admin123@${NEXUS_DOMAIN}/repository/maven-snapshots \ -Dfile=build/libs/${artifactId}-${appVersion}.jar \ -DpomFile=build/pom.xml \ -Djavadoc=build/libs/${artifactId}-${appVersion}-javadoc.jar \ -Dsources=build/libs/${artifactId}-${appVersion}-sources.jar \ " ----------------------------------------------------------
A-pZ

2019/07/15 15:58

d(・ω・Nice work.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問