Java アプリの メイン・マニフェスト属性 を jar に与える
メイン・マニフェスト属性を jar ファイルに与えて java -jar XXX.jar で実行可能にする方法をメモします。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.0.0</version> <configuration> <finalName>IgapyonApp</finalName> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>igapyon.app.App</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
初めての maven の Java プロジェクト
※このページの最新版は ここ を参照ください。
Maven の Java プロジェクトを新規作成
cd workspace/ mvn archetype:generate -DgroupId=igapyon.app -DartifactId=IgapyonApp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
コマンドラインからの jar ファイル作成および実行
cd IgapyonApp/ mvn package java -classpath target/IgapyonApp-1.0-SNAPSHOT.jar igapyon.app.App Hello World!
文字エンコーディングの記述
いずれ必要になる文字エンコーディングについて、
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
その他のよく使うコマンド
- mvn compile
- mvn test
- mvn package
- mvn install
- mvn deploy
- mvn clean
maven インストール
cd /tmp tar xvzf apache-maven-3.3.9-bin.tar.gz sudo mkdir /opt/apache-maven-3.3.9 sudo mv /tmp/apache-maven-3.3.9/* /opt/apache-maven-3.3.9/
/etc/bash.bashrc
export MAVEN_HOME=/opt/apache-maven-3.3.9 export PATH=$PATH:$MAVEN_HOME/bin
動くドキュメントかつ自動テストとしての Geb スクリプト
Geb で動くドキュメントかつ自動テストな Geb スクリプトを作ってみようとトライしてみました。色々悶絶したので、それをメモしておきます。
※この日記エントリは Geb Advent Calendar 2016 に参加しています。
みなさん、ドキュメントを作成するの、好きですか?あるいは、テストコードをコーディングするの好きですか?それらは実コードのコーディングよりも重要で楽しいですか?
私は、できれば実コードの作成を優先し、ドキュメント作成やテストコード作成は低優先度で行きたい派です。
とはいえ、一般的に、あるいは経験的に、ドキュメント書いたりテスト書いたりしないとヒドイ事が起きるので、仕方なくドキュメント書いたりテスト書いたりしますですよね。
そこに Groovy 系列の Geb を使って解決しようとするのが今回の取り組みです。一般的に Groovy は Java コードよりも行数が少なくなるメリットがあるので、今回のようなテストコード作成には役立つことが期待できます。
ここから横道。読み飛ばしてOK。
なのですが、ところがですね、私は Groovy 習熟度が低かったので、色々ハマりました。 まず gradle 無しで 単純 groovy のみで、取り掛かってみようとしました。 すると、色々難易度上がります。 でも 最初の理解には 単体 groovy で、、、と頑張ったところ、色々ハマりました。奥が深いです。 さらに、途中で Ubuntu 16.04 に gradle インストールしようとして、それが引き寄せる groovy が入り、バージョン違いでナニガシ、、、 というように、真正面から色々ハマりました。 を一巡したところで、本文に戻ります。
ということで、まずは単純 Geb による「$」による要素アクセスのみを試して見ました。ドキュメント記述(そしてコンソール出力)には Ant タスクを利用しています。groovy から Ant タスクの echo を呼び出す、なんとも不思議な感触です。
@Grab('org.gebish:geb-core') @Grab('org.seleniumhq.selenium:selenium-java') @Grab('org.seleniumhq.selenium:selenium-chrome-driver') import geb.Browser import org.openqa.selenium.chrome.ChromeDriver {-> def home = System.properties['user.home'] System.setProperty('webdriver.chrome.driver', "${home}/apps/selenium/chromedriver" ) }() Browser.drive(driver:new ChromeDriver()) { def ant = new AntBuilder() ant.echo('サイトを開く') go 'http://www.yahoo.co.jp/' ant.echo('認証画面を開く') $("#siteinfo > li:nth-child(3) > a").click() ant.echo('トップ画面に戻る') $("#ygmhlog").click() }
そして、これが可読性のあるテストコードとドキュメントの合成例です。
まずは最初の一歩ではありますが、まあ Java に比べると確かにこの時点で既にコード量は減っていますね。
bot 関連情報の収集
[Groovy] シンプル Groovy サンプル
Apache Groovy は Apache Foundation 配下にある言語及びコンパイラです。
まずは「apache-groovy-binary-2.4.7.zip」(この時点の最新安定板) をダウンロードします。そしてこれを展開します。
GROOVY_HOME を展開後ディレクトリに設定し、PATH に $GROOVY_HOME/bin を追加します。
例えば Ubuntu だと、以下のように .bashrc に2行追加することにより動くようになります。
.bashrc
GROOVY_HOME=/home/user1/apps/groovy PATH=$PATH:$GROOVY_HOME/bin
対話形式による 初めての Groovy
次に、これを、まずはソースコードを作らずに対話形式による駆動を行ってみます。groovysh により、対話的に、素早く Groovy を動作させることができます。
bash から実行
$ groovysh Groovy Shell (2.4.7, JVM: 1.8.0_102) Type ':help' or ':h' for help. ------------------------------------------------------------------------------- groovy:000> println "こんにちは世界!" こんにちは世界! ===> null groovy:000>
やたら Geb を勧められるので使ってみる
Selenium がらみでお知り合いになった @PoohSunny さんに やたら Geb を勧められました。Geb は Groovy 上で動く Web テスティングフレームワークなのだそうです。@PoohSunny さんの Geb のデモがやたらクールだったので、取り組んでみようと思いました。
※この日記エントリは Geb Advent Calendar 2016 に参加しています。
そういえば Groovy って、、、
そういえば かねてより (数年も前から) 私の一部の知人群で「熱狂的な」Groovy ファンが 私に Groovy を勧めていたので、腹をくくって(?)、関心を持ったのもあります。
まずは Groovy のインストール
まず Geb は Groovy ベースなので、先に Groovy インストールする必要があります。そのため、まずは Groovy を入門する必要があります。ということで、先に Groovy をインストールする手順を とっても簡単にメモしておきます。
ふむ。Java さへ入っていれば、こんな手順だけで簡単にインストールが終わるのって、不思議ですね。
ようやくここから Geb ハローワールド
さて、それでようやっと Geb を試そう、ということなので、「Groovy に Geb をインストールするんだよな。どうやるんだろう?」って不思議に思ったのですが、これが不思議、「@Grab」という構文に FQN を突っ込むと、実行時に maven リポジトリから自動的にダウンロードして .groovy/grapes にセットのうえ利用可能になるという超絶便利機能が Groovy に天然で備わっています。びっくり仰天です。これは便利だのう。
だから、以下のようにソースファイルを作成のうえ groovy で実行すると初回に自動的に必要ライブラリ一式をダウンロードした上で実行されます。ちなみに初回のダウンロード時間には注意が必要そうです(苦笑)
RunBrowser.groovy (ソースファイル)
@Grab('org.gebish:geb-core') @Grab('org.seleniumhq.selenium:selenium-java') @Grab('org.seleniumhq.selenium:selenium-chrome-driver') import geb.Browser import org.openqa.selenium.chrome.ChromeDriver {-> def home = System.properties['user.home'] System.setProperty('webdriver.chrome.driver', "${home}/apps/selenium/chromedriver" ) }() Browser.drive(driver:new ChromeDriver()) { go 'https://www.google.co.jp' }
ソース的には、Selenium WebDriver 経由で Google Chrome を動作させる姿です。Selenium の Chrome 用 WebDriver をダウンロード及び配置している必要があります。
コマンドライン (bash)
$ groovy RunBrowser.groovy Starting ChromeDriver 2.25.XXXXXX (XXXXXXXXXXXX) on port XXXXX Only local connections are allowed. 12 18, 2016 10:30:53 午後 org.openqa.selenium.remote.ProtocolHandshake createSession 情報: Attempting bi-dialect session, assuming Postel's Law holds true on the remote end 12 18, 2016 10:30:56 午後 org.openqa.selenium.remote.ProtocolHandshake createSession 情報: Detected dialect: OSS $
Google Chrome
これを実行中に Google Chrome が開いて Google サイトが表示されました。確かに Groovy ソースコードの Geb 記述から Chrome をリモート操作できています。やったー。