Jar をインポートし、Maven のローカル ライブラリ ディレクトリを Nexus にバッチ インポートする方法この記事では、スクリプトを使用して Maven のローカル ライブラリ ディレクトリのすべての依存関係を Nexus プライベート サーバーにバッチ インポートする方法を紹介します。多くの学生がスクリプトの内容を理解できないと報告しました。この記事では、バッチでインポートされたスクリプトを分析します。
脚本レビュー
#!/bin/bash
# copy and run this script to the root of the repository directory containing files
# this script attempts to exclude uploading itself explicitly so the script name is important
# Get command line params
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done
find . -type f -not -path './mvnimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
脚本解析-section1
これは B シェル スクリプトであり、Linux では直接実行でき、Windows では Git Bash を使用して実行できます。
- 最初の 4 行はシャープ記号 (
#
) で始まり、これがコメントの内容です getopts ":r:u:p:" opt
コマンドラインを取得するためのオプションの値です":r:u:p:"
最初のコロンは、コマンド ラインの optstring にないパラメータがある場合にエラーが表示されないことを意味します。オプション名の後のコロンは、オプションが値を渡すことを示します。たとえば、コマンドのオプションr:
設定ラインは-r rvalue
while done
シェルスクリプト内のループですcase in esac
シェルスクリプトのフォークです- 取得したオプションの値は $OPTARG に格納されます。」
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done
まとめると、上記のスクリプトの意味は次のとおりです:
コマンド ラインで 3 つのオプションの値を取得するr u p
コマンド ラインが呼び出されたときにオプションの値を渡す方法は明らかです
-u admin -p yourpassword -r http://localhost:8081/repository/maven-releases/
。 Nexus ライブラリのアドレス、ユーザー名、パスワードをそれぞれ REPO_URL、USERNAME、PASSWORD 変数に取得します。
脚本解析-section2
find . -type f -not -path './mvnimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml'
find コマンドは、現在のディレクトリ (サブディレクトリを含む) 内で指定された条件を満たすファイルのリストを検索します。このコマンドは、隠しファイル、. で始まるファイル、および指定された特定のファイルをフィルターで除外します。
コマンドの各部分の意味は次のとおりです。
.: 現在のディレクトリを検索するように指定します。
-type f: ディレクトリやその他の特殊なファイルを除外し、通常のファイルのみを検索することを示します。
-not -path './mavenimport.sh*': 「mavenimport.sh」という名前のファイルまたはディレクトリに一致しないことを示します。この部分は、-not と -path を使用して「mavenimport.sh」という名前のファイルまたはディレクトリを除外します。 。
-not -path ' /. ': 「.」で始まる隠しファイルが一致しないことを示します。このセクションでは、-not と -path を使用して、スラッシュで始まり、その後にピリオドが続くファイル パス (例: "/.git") を除外します。
-not -path ' /^archetype-catalog.xml ': 「archetype-catalog.xml」という名前のファイルまたはディレクトリに一致しないことを意味します。このセクションで -not と -path を使用する目的は、ファイル名が「archetype-catalog.xml」であるファイルまたはディレクトリを除外することです。
-not -path ' /^maven-metadata-local .xml': 「maven-metadata-local.xml」という名前のファイルまたはディレクトリに一致しないことを意味します。このセクションでは、-not と -path を使用して、ファイル名「maven-metadata-local.xml」を持つファイルまたはディレクトリを除外します。
-not -path ' /^maven-metadata-deployment.xml': 「maven-metadata-deployment.xml」という名前のファイルまたはディレクトリが一致しなかったことを示します。このセクションでは、-not と -path を使用して、ファイル名が「maven-metadata-deployment.xml」のファイルまたはディレクトリを除外します。
要約すると、このコマンドは、「.」で始まる隠しファイルと現在のディレクトリにないいくつかの特定のファイルを除くすべての通常のファイルを検索します。
脚本解析-section3
| sed "s|^\./||"
- 縦棒
|
はパイプ名で、前のコマンドの出力が次のコマンドの入力として使用されます。
ここでの sed コマンドは、パス名のプレフィックスの「./」を削除するために使用されます。ファイル一覧として出力したり、カレントディレクトリ内のファイルを加工したりする場合に適しています。
このコマンドでは、sed はテキスト置換ツールであり、s は置換操作の開始を示し、| は置換操作のすべての部分を囲む区切り文字を示します。すべてのコマンドラインは | で終わります。たとえば、^./ は、置換するテキスト、つまり ./ を先頭から見つけて削除することを意味します。
したがって、ファイル名の前に相対パス ./ を持つファイルのリストがある場合は、次のコマンドを使用して、すべてのファイル名の前にある ./ パス名プレフィックスを削除します。
コードをコピーする
sed "s|^./||" filelist
これは、パス名プレフィックスのないファイル名のリストを出力します。
./antlr/antlr/2.7.2/antlr-2.7.2.jar
=》
antlr/antlr/2.7.2/antlr-2.7.2.jar
脚本解析-section4
| xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{}
これは、複数のローカル ファイルをリモート リポジトリにアップロードするためのcurlコマンドです。このコマンドは、xargs コマンドも使用して、出力を引数としてcurl コマンドに渡します。
コマンドの各部分の意味は次のとおりです。
xargs -I '{}': 前のコマンドの出力を次のコマンドのパラメーターとして使用し、-I '{}' はプレースホルダーを指定します。
curl: HTTP リクエストの送信に使用されます。
-u "ユーザー名 : ユーザー名 :私を探してください: PASSWORD”: 認証資格情報を指定します。$USERNAME と $PASSWORD は、ユーザー名とパスワードを保存するための変数です。 -X
PUT: HTTP リクエスト メソッドを PUT として指定します。これは、ファイルをリモート ウェアハウスにアップロードするために使用されます。
-v : 冗長モードを有効にし、コマンドによって送受信されたリクエストとレスポンスの詳細を表示できます。
-T {}: アップロードされたファイルのパス ({} をプレースホルダーとして指定し、xargs によって実際のファイル パスに置き換えられます) を指定します。 REPURL
/ : アップロードされたファイルのリモートの場所を指定します。ウェアハウス URL パス、{REPO_URL}/{}: ファイルをアップロードするためのリモート ウェアハウス URL パスを指定します。担当者うR L /:ファイルをアップロードするためのリモート ウェアハウスの URL パスを指定します。{ REPO_URL }は、ウェアハウスの URL を格納する変数です。
要約すると、このコマンドは現在のディレクトリ内のすべてのファイルを検索し、curl コマンドを使用して指定されたリモート ウェアハウス パスにファイルをアップロードします。すべてのファイルがアップロードされるまで、アップロード時に指定されたユーザー名とパスワードで認証します。