気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

別名のlog4jを読み込む方法

今となってはもっとモダンな書き方があるのかもしれませんが、 開発時に使った書き方について備忘録として残しておきます。

プロパティファイル読み込み

クラスパスの通ったresources以下にあるlog4jのプロパティを読み込む場合の記述方法です。

ClassLoader cl = AbstractBatch.class.getClassLoader();
URL url = cl.getResource("resources/mylog4j.properties");
PropertyConfigurator.configure(url);

PropertyConfigurator.configureによって、上記ですとlog4j設定ファイルが読み込まれて ログ設定が読み込まれた状態となります。

Maven ダウンロードが上手くできないJarを手動でインストールする方法

最初は以下よりjarをダウンロードして、ディレクトリ階層を作ったりしてましたが。。
Maven Repository: Search/Browse/Explore

Eclipsemavenビルド実行時のエラー分にmaven installコマンドの記載がありました。
これを実行して、出力先パスを指定すれば、適切なフォルダを作成しつつ、DLしてくれました。

mvn install:install-file -DgroupId=com.google.firebase -DartifactId=firebase-admin -Dversion=6.8.1 -Dpackaging=jar -Dfile=C:\myRepository

未来の自分がまた同じことをやる可能性もあるので、メモしておきます。

Git 修正コミットを一つにまとめてマージ

git rebase -i でできるコミットまとめをmergeするときにやるには以下のコマンドを使います。

git merge --squash staging
git merge --squash --allow-unrelated-histories staging # 紐づきがない履歴はマージできないと怒られたらこっち
  • 注意点
    • 初期コミットがないと怒られるので、2つ目以降のコミットとしてマージする
    • 紐づきがないブランチをマージするとマージしているけど、リビジョンの線が切れて表示される。もしかしたら、あまり推奨されない方法かもしれません。。

Git ローカルブランチ、リモートブランチの削除

ブランチ削除コマンド、毎回調べている気がするので備忘録のために残しておきます。

ローカルブランチ

# ブランチ一覧を表示する
git branch
master
foo
bar

# ローカルブランチ削除
git branch --delete foo

# マージ確認なしで削除する
% git branch -D foo

リモートブランチ

# リモートブランチの一覧を表示する
git branch --remote
origin/HEAD -> origin/master
origin/foo
origin/bar

# リモートブランチ削除 その1
git push --delete origin foo

# リモートブランチ削除 その2
git push origin :foo

削除済みリモートブランチをローカルに反映

自分や他人が削除したリモートブランチをローカルに反映する。 ローカル上では、以下コマンドを実行しないとリモートブランチは残り続ける

# 手動反映
git fetch -p

# 自動反映する設定を行う
git config --global fetch.prune true

日常作業を効率化 Googleサービス、Qiita

ちょっとした不便を見逃さず、効率化していくと
仕事が爆速化していく。

仕事で使えるちょっとした工夫を書いていきます。

Googleカレンダー

Googleカレンダーの表示切り替えもマウス使ってられません。
ショートカットを覚えてサクサク情報収集していきたいですね。

特に、複数人のカレンダーを参照している人は、日別と週別の切り替えは多用すると思います。

「Shift + /」でショートカットキー一覧が表示

■移動系
・前の期間:「p」(past)or k
・次の期間:「n」(next)or j
・今日:「t」(today)

■ビュー切り替え系
・日単位ビュー:「d」(day)
・週単位ビュー:「w」(week)
・月単位ビュー:「m」(month)

引用元
https://qiita.com/s_yaginuma/items/7cc6e4bedc9f30081e08

Gmail検索

サクッと対象メールを見つける「検索演算子

実際に使っていて便利なものだけを記載しておきます。

カテゴリ フィルタ 検索対象 使い方
システム subject: タイトル
in:chats googleハングアウト
開封状態 is:unread 未読メール
送受信時期 after: 送受信後の日付 after:2019/01/01
before: 送受信前の日付 before:2019/01/01

未読メールが複数ページに渡って大量に溜まっているとき一括で既読にするには、
is:unreadで未読メールを特定して、検索窓下のメニューよりすべて既読を選択すると一括既読にできるのはめちゃくちゃ便利です。

Qiita

chromeの検索ブラウザ設定で キーワードに「@qii」など登録しておくと
いちいちサイト検索&アクセス後でのサイト内検索が不要。

既定の検索エンジンを設定する - パソコン - Google Chrome ヘルプ

キーボードショートカット

キーボードショートカット 効果 使える場所
⌘ + E 投稿編集ページへ飛ぶ 記事ページ
⌘ + S 記事を一時保存 記事の編集中
⌘ + Enter 記事を保存 or コメントを投稿 記事 or コメントの編集中
(記事は現在の "WIP" or "Ship It" の状態を引き継いで保存します)
J, K (同じカテゴリ内の)前の記事/次の記事 記事詳細ページ
/ 検索formにfocus どこでも

Mavenプラグイン調査

maven-source-plugin

概要

Maven centralにアップされていないライブラリに対して、ソースを紐付けることができるプラグイン

  1. 具体的には、xxx-source.jarを作成し、ローカルリポジトリ(.m2配下)に登録。
  2. maven eclipse pluginを使って、Eclipseの.projectファイルを生成させた際に、ライブラリに対してソースを紐付ける

設定方法

pom.xmlに、maven pluginの設定追加を行います。
Maven3系かつ、JDK7以上である必要があります。

pom.xml

  <build>
      <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
            <execution>
                <id>attach-sources</id>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
       </plugin>
     </plugins>
  </build>

pluginをインストールし、ソース・ファイルが生成される状態とし、同時にxxx-source.jarもローカルリポジトリに登録します。

mvn install

maven eclipse pluginを利用して、Eclipseの.projectファイルを生成した際に、ライブラリとソースを紐付けます。

mvn -DdownloadSources eclipse:eclipse

Maven設定(Javaバージョン指定、複数プロジェクト管理)

Maven設定は、ライブラリの依存関係追加ぐらいしか、触ることがなかったが必要が
設定構成がイマイチなプロジェクトを見直す必要が出てきたので、よくわかっていなかった設定について
いくつかまとめてみます。

環境

  • Java 1.6と1.8が混在
  • Maven 3.6.1
  • Eclipse 4.8 Photon
  • 複数プロジェクトが存在し、依存関係あり

1. Javaバージョン指定方法

Mavenコンパイル時や実行時のJavaバージョンの指定が可能です。
Mavenで指定すると、Eclipse側のビルドパスよりも設定が優先されます。

Javaバージョンの指定は、JAVA_HOMEバージョンとmaven-compiler-pluginで指定するJavaバージョンは合わせる必要があります。
もし、異なる場合は、JAVA_HOME指定バージョンの方が新しい状態にしておく必要がありそうです。

pom.xml pluginタグで指定

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin>
<plugins>

Maven3系であれば、maven-compiler-pluginのプロパティーで以下のように指定することもできます。

pom.xml propertiesタグで指定

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
</properties>

Spring Bootで指定する場合は、以下になります。

pom.xml Spring Bootにおいて、propertiesタグで指定

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <failOnMissingWebXml>false</failOnMissingWebXml> <!-- web.xml省略時に出る警告を消す -->
</properties>

2. マルチモジュール・プロジェクトを管理する

互いに依存関係のあるプロジェクトを順番にビルドしてビルドモジュールを作成したい場合があります。
この時、自動ビルドでは予期した順にビルドされず、ビルドに失敗してしまいます。

この場合は、packagingをpomにしたビルド専用プロジェクトを用意することで、
意図した順序でビルドを実行できます。

test_webプロジェクトがtest_dbプロジェクトに依存している際に、test_db → test_webの順で
ビルドするようにpom.xmlに以下のように設定します。

pom.xml (test_pomプロジェクト)

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test_pom</groupId>
  <artifactId>test_pom</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
    <module>../test_db</module>
    <module>../test_web</module>
  </modules>
</project>

pom.xml (test_dbプロジェクト)

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test_db</groupId>
  <artifactId>test_db</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <parent>
    <groupId>test_pom</groupId>
    <artifactId>test_pom</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
</project>

pom.xml (test_webプロジェクト)

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test_web</groupId>
  <artifactId>test_web</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  ...
  <dependencies>
   ...
   <dependency>
     <groupId>test_db</groupId>
     <artifactId>test_db</artifactId>
     <version>1.0.0-SNAPSHOT</version>
   </dependency>
   ...
  </dependencies>
  ...

  <parent>
    <groupId>test_pom</groupId>
    <artifactId>test_pom</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
</project>