2018年10月23日火曜日

VSCodeでJava環境構築

Visual Studio CodeでJavaの開発環境構築をやってみる。

まず、拡張機能ビューを開く。Ctrl + Shift + Xでビューが開くので「Java Extension Pack」をインストールする。



単純なソースを書いて保存。右下の言語モードの選択でJavaを選択すると、Javaのハイライトが行われるようになる。デフォルトだとこの欄はPlain Textとなっている。



F5で実行。はじめてF5を押した時はlaunch.jsonというファイルが作成されるだけなので、2回押す必要がある。



デバッグコンソールにHello World!と表示されたことが確認できた。

行番号の左横をクリックすることでブレイクポイントも置ける。

2018年10月22日月曜日

PostgreSQLにおけるスキーマの定義変更

スキーマの定義変更方法。すぐ忘れてしまうのでメモしておく。

スキーマの名称変更。

alter schema [name] rename to [newname]

nameが既存のスキーマ名で、newnameが新しいスキーマ名。

スキーマの所有者変更。

alter schema [name] owner to [newowner]

nameが所有者を変更したいスキーマ名で、newownerが新しい所有者のロール名。

スキーマの所有者を変更はスーパーユーザーでないと出来ない。

2018年10月21日日曜日

jarの依存関係をjdepsで調べる

JDK8からjdepsというjarとかclassの依存関係を調べてくれるツールが付属している。

自分で作ったものならいいのだが、いまどきのシステム開発は自前ですべてをそろえるなんていうことも少ないだろう。どっかからライブラリを持って来たりすると思う。

ただ、これも当初の開発メンバーがいなって1年以上なんてことになると、ライブラリの依存関係が分からなくなってしまうことがある。動いているものはほうっておくという考え方もあるのだが、整理したいなんて言い出す人もいるものだ。

そんなときにjdepsを利用すると簡単に依存関係を調べてくれるので便利だ。

jdeps helloworld.jar

このコマンドだけで指定したjarの依存関係を調べてくれる。半角スペースで区切って複数のjarを指定することもできる。また、jarだけでなくclassの指定も可能だ。

jdeps helloworld.class

クラスの場合、半角スペース区切りで複数指定することもできるけれど、ワイルドカードも使えるのでこちらのほうが便利だ。

jdeps *.class

なぜだか分からないが、ワイルドカードはjarでは使えない。

出力結果は下記のようなる。

helloworld.jar -> java.base
   helloworld                                         -> hellodependency                                    helloworld.jar

   helloworld                                         -> java.io                                            java.base
   helloworld                                         -> java.lang                                          java.base
   hellodependency                                    -> java.io                                            java.base
   hellodependency                                    -> java.lang                                          java.base

この例だとhelloworld.jarはhellodependencyに依存しているということが分かる。

依存関係が分からないときは「見つかりません」と表示される。

helloworld.class -> java.base
helloworld.class -> 見つかりません
   helloworld                                         -> hellodependency                                    見つかりません
   helloworld                                         -> java.io                                            java.base
   helloworld                                         -> java.lang                                          java.base

指定されたjarやclassの中に依存関係にあたるjarやclassが含まれていないとダメなのだ。有効な解決手段は見つからなかった。とは言っても、参照ライブラリにあたるjarはひとまとめのディレクトリに保管してあると思うので、そのディレクトリにあるjarをすべて指定すればきっと依存関係は判明するはずだ。

PostgreSQL : カレントスキーマの切り替え

PostgreSQLにおけるカレントスキーマの切り替え方法。たまにしか使わないものだから、忘れてしまって使うたびに調べなおしてしまっている。

このSQLでスキーマの切り替えを行うことができる。fooのところに切り替え後のスキーマ名を指定する。
set search_path = foo

ちゃんと切り替わったかどうかはこのSQLで確認できる。
select current_schema

2018年10月20日土曜日

EclipseでTomcatのタイムアウト時間の変更方法

EclipseでのTomcatのタイムアウト時間の変更方法。

サーバービューを開いて、Tomcatをダブルクリック。


タイムアウト欄の開始の値を変えることでTomcatのタイムアウト時間を変更することができる。

2018年10月10日水曜日

AntによるJARの作成

AntによるJAR作成方法。

HelloAntというプロジェクトをAntを使ってJARを作成までを行う。

■構成
HelloAnt
  ├─src
  │    ├─helloant
  │    │    Main.java
  │     MANIFEST.MF
  build.xml

build.xmlがAntのビルド設定のファイル。各ファイルの内容は下記の通り。

■Main.java
package helloant;
public class Main {
     public static void main(String[] args) {
          System.out.println("Hello Ant");
     }
}

Main.javaはコンソールに Hello Ant と出力するだけ。

■MANIFEST.MF
Main-Class: helloant.Main

マニフェストにはメインクラスを記載しておく。

■build.xml
<?xml version="1.0" encoding="UTF-8" ?>
<project name="HelloAnt" default="dist" basedir=".">
     <!-- 1.定数の定義 -->
     <property name="dir.src" value="src"/>
     <property name="dir.target" value="target"/>
     <property name="dir.target.bin" value="${dir.target}/bin"/>
     <!-- 2.初期化処理 -->
     <target name="init" description="初期化処理">
          <delete dir="${dir.target.bin}"/>
     </target>
     <!-- 3.コンパイルの実行 -->
     <target name="compile" depends="init" description="コンパイル">
          <mkdir dir="${dir.target.bin}"/>
          <javac srcdir="${dir.src}"  destdir="${dir.target.bin}" includeAntRuntime="false"/>
     </target>
     <!-- 4.JARの作成 -->
     <target name="dist" depends="compile" description="JARの作成">
          <jar destfile="${dir.target}/helloant.jar"  basedir="${dir.target.bin}"  manifest="${dir.src}/MANIFEST.MF"/>
     </target>
</project>

Antのビルド定義はXMLで書いていく。

一番外側がprojectタグ。このタグはname、default、basedirの3つの属性を持っている。nameはプロジェクト名。defaultはデフォルトで動作するtarget。targetについては後述する。最後のbasedirがパス計算を行うときのベースディレクトリ。

projectタグの中にはひとつ以上のtargetタグを定義する。このタグはビルドプロセスのひとまとまりを定義するもの。色々な属性を持っているけれど、今回使用したのはname、depends、descriptionの3つ。

nameはtargetの名前で、任意につけられる。

dependsはtargetの依存関係を示す。例えば、「4.JARの作成」には depends="compile"が設定されているので、「3.コンパイルの実行」に依存していることが分かる。依存関係を指定しておくことで、Antが勝手に解釈して必要なtargetを実行してくれる。

descriptionはtargetの説明を記述する、コメントのようなもの。

「1.定数の定義」のところでbuild.xml全体で使用する定数を指定している。name属性に定数名、valueに値を設定する。

「2.初期化処理」でビルド前の初期化処理を行っている。この例ではコンパイルした資源の削除を実行するようにしている。

「3.コンパイルの実行」ではソースのコンパイルを行っている。mkdirタグでコンパイル結果を格納するフォルダの作成を実行。javacタグではsrcdir属性で指定したソースコードをコンパイルし、destdirへ結果を出力するようになっている。includeAntRuntime属性はAntランタイムライブラリをクラスパスに含めるかどうかの設定を行っている。ちなみにfalseを設定することが推奨されていて、未指定だとAnt実行時にwarningが発生する。

「4.JARの作成」で実際にJARの作成を行っている。jarタグのdestfile属性でJARファイル名を指定。basedirでJARに含める資源を指定。manifestでマニフェストを指定する。今回は実行可能JARを作成したいのでマニフェストを指定しているが、普通のJARを作るだけなら指定する必要はない。

これでAntを実行すればJARの作成が行われる。Eclipseでみると以下のような構成になっているはず。


build.xmlを 右クリック > 実行 > Antビルド... をクリックする。下記のようなダイアログが表示されるので dist だけチェックを入れて実行。


HelloAnt/targetフォルダにJARが作成されているので、以下のコマンドを実行して、実行可能JARの作成が正常に行われていることを確認。

java -jar helloant.jar


参考サイト
https://ant.apache.org/manual/index.html