Maven プロファイル指定ビルドと、生成物の名前

Maven profile を使用してビルド対象リソース管理しているプロジェクトで
ビルドする JAR名も合わせて変更したい。という要求

通常デフォルトのMaven がビルドするJAR は、artifactId 名 + "-" +バージョン番号 + ".jar" という書式で
JARファイルが作成される。

mvn コマンドオプションで直接指定する方法
例) -Djar.finalName= オプションで指定する。
プロジェクト名、アーティファクトID名も同じ名前の alpha を "custom-jar-name" JAR名でビルド

mvn clean package -DskipTests=true -pl alpha -Djar.finalName=custom-jar-name

profile を指定した JAR 作成で、profile名に沿って JARファイル名にしたい場合、
例)親子関係の Maven pom プロジェクトと Maven サブモジュール の構成とする。

Maven pom プロジェクトの pom.xml のプロファイル記述

<packaging>pom</packaging>
<modules>
  <module>alpha</module>
</modules>

<profiles>
   <profile>
      <id>develop</id>
      <build>
        <resources>
          <resource>
            <directory>src/main/resources-develop</directory>
          </resource>
          <resource>
            <directory>src/main/resources</directory>
          </resource>
        </resources>
      </build>
    </profile>
</profiles>

これは、サブモジュールのプロジェクトで、デフォルトのリソースは、src/main/resources 配下のみを使用
プロファイル名=develop では、src/main/resources-develop 配下を追加して使用する。
同じソース名は、プロファイル指定が使用されるようにビルドされる。

サブモジュール alpha プロジェクトの pom.xml では

プロファイル名に沿った JAR ファイル名のプレフィックスを定義して
jar.finalName プロパティを定義することで、-Djar.finalName= オプションで実行するのと同じ効果にする。

<profiles>
   <profile>
      <id>develop</id>
      <properties>
         <jarprefix>Dev-</jarprefix>
      </properties>
   </profile>
</profiles>

<properties>
    <jarprefix></jarprefix>
    <jar.finalName>${jarprefix}${artifactId}-${project.version}</jar.finalName>
</properties>

プロファイルを指定しないビルド時の為に、<properties> で、 <jarprefix></jarprefix> が必要である。

ビルド実行は以下のようになる

mvn clean package -DskipTests=true -pl alpha -am

alpha-0.0.1-SNAPSHOT.jar が作成される。

mvn clean package -DskipTests=true -pl alpha -am -P develop

Dev-alpha-0.0.1-SNAPSHOT.jar が作成される。

bash 正規表現など

マッチした部分の抽出

#!/bin/bash

item="recty-8.10.12"

if [[ ${item} =~ ([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
    echo '${BASH_REMATCH}='"${BASH_REMATCH}"
    echo '${BASH_REMATCH[0]}='"${BASH_REMATCH[0]}"
    echo '${BASH_REMATCH[1]}='"${BASH_REMATCH[1]}"
    echo '${BASH_REMATCH[2]}='"${BASH_REMATCH[2]}"
fi

で条件囲むことを忘れない

${BASH_REMATCH}=8.10.12
${BASH_REMATCH[0]}=8.10.12
${BASH_REMATCH[1]}=8
${BASH_REMATCH[2]}=10

# 前方一致

#!/bin/bash

list="foo-2d foo-3d foo-3d-foo-4d gas-1d"
echo "list = ${list}"
echo '${name#foo-} で除去'
for name in ${list}; do
   echo "$name --> ${name#foo-}"
done

echo '${name##*foo-} で除去'
for name in ${list}; do
   echo "$name --> ${name##*foo-}"
done
list = foo-2d foo-3d foo-3d-foo-4d gas-1d
${name#foo-} で除去
foo-2d --> 2d
foo-3d --> 3d
foo-3d-foo-4d --> 3d-foo-4d
gas-1d --> gas-1d
${name##*foo-} で除去
foo-2d --> 2d
foo-3d --> 3d
foo-3d-foo-4d --> 4d
gas-1d --> gas-1d

# 前方一致

#!/bin/bash
list=("foo-2d" "gas-2d" "gas-2d" "foo-2d-gas-2d")
# 後方一致
echo "list=${list[@]}"
echo '${name%-2d} で除去'
for name in ${list[@]}; do
   echo "$name --> ${name%-2d}"
done

echo '${name%%-2d*} で除去'
for name in ${list[@]}; do
   echo "$name --> ${name%%-2d*}"
done

echo '配列を、${name%%-2d*} で除去'
newlist=${list[@]%%-2d*}
echo ${newlist}
list=foo-2d gas-2d gas-2d foo-2d-gas-2d
${name%-2d} で除去
foo-2d --> foo
gas-2d --> gas
gas-2d --> gas
foo-2d-gas-2d --> foo-2d-gas
${name%%-2d*} で除去
foo-2d --> foo
gas-2d --> gas
gas-2d --> gas
foo-2d-gas-2d --> foo
配列を、${name%%-2d*} で除去
foo gas gas foo

置換

#!/bin/bash

list=("foo-3d" "foo-3d-foo-4d" "gas-1d")
echo "list = ${list[@]}"
# 前方のみ
echo '${name/foo-/dac-/} で置換'
for name in ${list[@]}; do
   echo "$name --> ${name/foo-/dac-/}"
done
# すべて
echo '${name//foo-/dac-/} で置換'
for name in ${list[@]}; do
   echo "$name --> ${name//foo-/dac-/}"
done

echo '${name^} で先頭だけ大文字'
for name in ${list[@]}; do
   echo "$name --> ${name^}"
done
echo '${name^^} で全て大文字'
for name in ${list[@]}; do
   echo "$name --> ${name^^}"
done

list=("FOO-3D" "FOO-3D-FOO-4D" "GAS-1D")
echo "list = ${list}"
echo '${name,} で先頭だけ小文字'
for name in ${list[@]}; do
   echo "$name --> ${name,}"
done
echo '${name,,} で全て小文字'
for name in ${list[@]}; do
   echo "$name --> ${name,,}"
done
list = foo-3d foo-3d-foo-4d gas-1d
${name/foo-/dac-/} で置換
foo-3d --> dac-/3d
foo-3d-foo-4d --> dac-/3d-foo-4d
gas-1d --> gas-1d
${name//foo-/dac-/} で置換
foo-3d --> dac-/3d
foo-3d-foo-4d --> dac-/3d-dac-/4d
gas-1d --> gas-1d
${name^} で先頭だけ大文字
foo-3d --> Foo-3d
foo-3d-foo-4d --> Foo-3d-foo-4d
gas-1d --> Gas-1d
${name^^} で全て大文字
foo-3d --> FOO-3D
foo-3d-foo-4d --> FOO-3D-FOO-4D
gas-1d --> GAS-1D
list = FOO-3D
${name,} で先頭だけ小文字
FOO-3D --> fOO-3D
FOO-3D-FOO-4D --> fOO-3D-FOO-4D
GAS-1D --> gAS-1D
${name,,} で全て小文字
FOO-3D --> foo-3d
FOO-3D-FOO-4D --> foo-3d-foo-4d
GAS-1D --> gas-1d

JSONテキストを変数にする

bashスクリプトを書いていて、変数にJSONテキストを入れたい。

サンプル
シングルクォートで括って、、

#!/bin/bash

name="orange"
msg='{
       "count": 12,
       "item" : "'$name'"
}'

echo $msg

JSONの中で変数をセットするのが良い書き方に思えない。
echo の結果はこうなる

{ "count": 12, "name" : "orange" }

cat コマンドを使って結果入力にする。
<< で最終文字までを指定する方法
よく、EOF とか書いたりするが、今回は、"!" 文字で。

#!/bin/bash

name="orange"
msg=`cat <<!
{
   "count": 12,
   "name" : "$name"
}
!`

echo $msg
{ "count": 12, "name" : "orange" }

入れ子の bash コマンド実行結果の代入

bash コマンド実行結果を変数に代入する場合、「`」逆クォーテーションで囲むか、
$( ) で囲むかであるが、入れ子が発生する場合をどう書くか?


まず、入れ子にしないケース
1970-1-1 00:00:00 からの秒数、所謂エポック秒を date コマンドで求めた変数を
Perlグリニッジ標準時GMT)にしてからフォーマットするケース

ptime=`date '+%s'`
stime=`perl -e 'use POSIX; printf(strftime("%Y-%m-%dT%H:%M:%SZ", gmtime($ARGV[0])));' $ptime`
echo "$stime"

2022-07-30T08:32:48Z


入れ子にするケース

逆クォーテーションで囲み内で、$( )

stime=`perl -e 'use POSIX; printf(strftime("%Y-%m-%dT%H:%M:%SZ", gmtime($ARGV[0])));' $(date '+%s')`

$( ) 囲み内で、$( )

stime=$(perl -e 'use POSIX; printf(strftime("%Y-%m-%dT%H:%M:%SZ", gmtime($ARGV[0])));' $(date '+%s'))

$( ) 囲み内で、逆クォーテーションで囲み

stime=$(perl -e 'use POSIX; printf(strftime("%Y-%m-%dT%H:%M:%SZ", gmtime($ARGV[0])));' `date '+%s'`)


逆クォーテーション囲み内で、逆クォーテーションで囲み
これはできない!

Windows Subsystem for Linux でWindows側のドライブ

Windows Subsystem for Linux (WSL)をインストールして
ターミナルを立ち上げると、Windowsの Cドライブは既にマウントされている。

次のように、cd で移動すれば、Cドライブアクセス可能

$ cd /mnt/c/

Windows Subsystem for Linux で使う vi

1種類の Linux でしか試してないので vi の見た目が本当に使いにくいかどうか?
筆者は、WSL デフォルトの Ubuntu を入れてみて、vi でファイルを開いた時に、
・文字色配色コントラストが酷い
・1行目に #!/bin/bash と書いても、真っ黒のままで背景色と見分けつかない!
とても使えない。
良い方法は?と探したらありました。
WSL-Ubuntu における vim (vi) のテキスト色を見やすくする | 東京大学 佐々木淳 研究室 沿岸環境学 海岸工学 環境水工学 水環境学
とても助かります。

まず、その前に、、WSL のインストール。。。
Windows10 に、WSL のインストールは、次のように。。
管理者権限のコマンドプロンプトを開いたら、

>  wsl --install

デフォルトは、Ubuntu だそうだ。インストールした Ubuntu のバージョン確認は
PowerShell で以下のように確認

> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2

WSL-Ubuntu における vim (vi) のテキスト色を見やすくする | 東京大学 佐々木淳 研究室 沿岸環境学 海岸工学 環境水工学 水環境学
で紹介された方法、そのままですが、あえて書いてあることをそのまま
ここでも書きます。(引用)

インストールしたWSL のUbuntu のターミナルに入ったら、cd ~ でホームディレクトリに移動
そこで、、Molokai というある人が作った vim 用の配色テーマを採用させます。
( $ はプロンプト )

$ mkdir .vim
$ cd .vim
$ mkdir colors
$ git clone https://github.com/tomasr/molokai
Cloning into 'molokai'...
remote: Enumerating objects: 148, done.
remote: Total 148 (delta 0), reused 0 (delta 0), pack-reused 148
Receiving objects: 100% (148/148), 27.68 KiB | 275.00 KiB/s, done.
Resolving deltas: 100% (35/35), done.
$

インストールしたら以下のようにして、 .vimrc を編集します

$ mv molokai/colors/molokai.vim ./colors/
$ cd ..
$ vi .vimrc

.vimrc は、以下を書きます。

colorscheme molokai
set t_Co=256
hi Comment ctermfg=102
hi Visual ctermbg=255

これで、まともに vi の作業ができます。