djUnit を Maven プロジェクトで使う

Eclipse Kepler は C:\eclipse_kepler にインストールされているとする。

1. Eclipse Kepler に djUnit プラグインをインストールする

2. コマンドプロンプト

mvn install:install-file -Dfile=C:\eclipse_kepler\plugins\jp.co.dgic.eclipse.jdt.djunit_0.8.6\djunit.jar -DgroupId=jp.co.dgic -DartifactId=djunit -Dversion=0.8.6 -Dpackaging=jar -DgeneratePom=true

を実行する。

3. 自分のユーザーディレクトリの直下の .m2\repository\jp\co\dgic\djunit\0.8.6djunit-0.8.6.pom ができている。これを次のように修正する。

<?xml version="1.0" encoding="UTF-8"?>
<project
  xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>jp.co.dgic</groupId>
  <artifactId>djunit</artifactId>
  <version>0.8.6</version>
  <description>POM was created from install:install-file</description>
  <dependencies>
    <dependency>
      <groupId>asm</groupId>
      <artifactId>asm</artifactId>
      <version>3.1</version>
    </dependency>
    <dependency>
      <groupId>oro</groupId>
      <artifactId>oro</artifactId>
      <version>2.0.8</version>
    </dependency>
  </dependencies>
</project>

ここからは Eclipse Mars で作業。まずは普通に Maven のプロジェクトを作る。*1

3. pom.xml/project/build/plugins 要素に Surefire Plugin の記述を追加。

<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.18.1</version>
  <configuration>
    <argLine>-noverify -Djava.system.class.loader=jp.co.dgic.testing.common.DJUnitClassLoader -Djp.co.dgic.eclipse.virtualmock.usevirtualmock=true -Djp.co.dgic.eclipse.coverage.usecoverage=false -Djp.co.dgic.eclipse.project.source.dir=${project.build.sourceDirectory} -Djp.co.dgic.eclipse.virtualmock.ignore.library=false</argLine>
    <useSystemClassLoader>true</useSystemClassLoader>
    <reuseForks>false</reuseForks>
  </configuration>
</plugin>

argLine 要素の中身は 1 行で書く。

4. pom.xml/project/dependencies 要素に以下を追加*2

<dependency>
  <groupId>jp.co.dgic</groupId>
  <artifactId>djunit</artifactId>
  <version>0.8.6</version>
  <scope>test</scope>
</dependency>

これでとりあえず動きます。出力の日本語が文字化けするのはどうにかならんかにゃー。一応回避方法(?)はあるけど。

なお、残念ながら Jcoverage は現在は使えない模様(昔は Maven 用の Jcoverage プラグインがあったらしい)。

*1:が、そのままだと参照する JREJ2SE-1.5 になってしまうのでしかるべき修正を加えて JavaSE-1.8 にする。さらに Eclipse の設定で、JavaSE-1.8 が参照する JRE を公開 JRE ではなく JDK 内の JRE を参照するように変える必要がある。

*2:JUnit に関する記述は既にあるはずなので新たに書く必要は無い

Windows では Ruby 2.2.1 + Rails 4.2.1 はまだ使えない

Ruby を新しくしようと思って、先日リリースされた RubyInstaller で Ruby 2.2.1 を入れて Rails をインストールしたのだが…。

sqlite3 のバイナリがないところは百歩譲って良しとしよう。それは自前でビルドできる。しかし、何やら nokogiri なるものが悪さをしていっこうに捗らない。どうも Rails 4.2 からはこいつが標準装備らしいのだが、WindowsRuby 2.2 向けにはまだバイナリができていないらしいのだ。

「ないなら自前で作ればいいじゃん !」と、ありとあらゆる情報をかき集めて試行錯誤したが、残念ながらどれも不発。これは nokogiri 1.6.7 がリリースされるまでは諦めるしかなさそうだ…。

2015/03/31 追記 : 使えるようになりました。
http://qiita.com/akaneko3/items/247af28abded3b3d3617

djUnit プラグインは Eclipse Luna では使用不可

ようやく重い腰を上げて Eclipse Luna による開発環境を構築し始めました…までは良かったものの。

何と djUnit プラグインがインストールできない ! 調べるとどうやら Luna では使用不可みたいでした。

どうしても djUnit プラグインを使いたければ Kepler (+ Java8 support) を使うしかないようです。

djUnit のプロジェクトが停止している以上 Luna への対応は絶望的ですし、お仕事上 djUnit を使わざるを得ない人には頭の痛い話ですな。

同内容ツイート規制を避けるために

あか☆ねこ bot 君は現在毎時 15 分と 45 分の発言をランダムにしているが、ネタに乏しいので少し前と同じツイートをしようとして Twitter に怒られる可能性がある。ってかさっき怒られた(ログで確認)。

調べると、同内容のツイートをするには 24 時間開けるか間に 10 個以上ツイートを挟まないといけないようだ。

ネタを増やせば衝突の確率は下がるが、ランダムに決定している以上 0 には出来ない。

仮に 9:15 にあるツイートをしたとする。その後 bot 君が 10 回つぶやくには 2 時間半を要する。この間のランダムツイートは 9:45, 10:15, 10:45, 11:15, 11:45 の 5 回。次のランダムツイートのタイミングである 12:15 には 9:15 のツイート内容は関係してこない。ということは、過去 5 回のランダムツイートの履歴を保持しておいて、そこと衝突しないようにツイートを選択すればよいということか。容量 5 のキューを用意して管理しろと言うことですね。

あー、実装マンドクセ('A`)