冥冥乃志

ソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。

follow us in feedly

【縛りプレイ中】Codenvy(Eclipse Che)でGradleのプロジェクトをまともに使えるようにしたい(その2)

ちょっと時間が空いてしまいましたが、ちょっと変なところで引っかかっていて進んでなかったです。

Gradle + マルチプロジェクトの構成でCodenvyでコードを書く

前回調べてわかった通り、Codenvy(Eclipse Che)はビルドの柔軟性はありますが、コードを書くときのインテリセンスに使うクラスパスの指定には柔軟性がありません。maven基準です。

mao-instantlife.hatenablog.com

そのため現実解として、mavenプラグインを使って pom.xml を出力、という形を取っています。ただし、mavenはシングルプロジェクトのため、サブプロジェクト構成の場合は各サブプロジェクト配下にそれぞれ pom.xml が生成されます。

サブプロジェクトを扱う

Codenvy(Eclipse Che)では、プロジェクトルートとして取り込んだディレクトリ配下にあるサブディレクトリをルートにしてプロジェクトとして読み込ませることができます。サブプロジェクトにしたいディレクトリで右クリックでメニューを出すと Convert to project があります。

f:id:mao_instantlife:20161119172114p:plain

サブプロジェクト化する前に、mavenプラグインから生成された pom.xml をサブプロジェクトのルートに相当するディレクトリにコピーしておきましょう。メニュー選択後にプロジェクトタイプを選びます。ここはmavenを選択します。 pom.xml がすでにあるので、自動でプロジェクト設定が読み込まれてコードのインテリセンスの依存関係もとってセットアップしてくれます。

f:id:mao_instantlife:20161119172126p:plain

これを各サブプロジェクトに対して行えばいいわけです。面倒ですね。

コマンド構成を考える

Commandsでビルドやテストなんかのスクリプトをかけるのですが、マクロはあるけど引数が使えないんですね。というわけで、マクロから抽象化できるようなところはまとめるとして、無理なところは個別にコマンドを作る必要があります。この構成でやらないといけないことはだいたい以下になるかな、と。

  • プロジェクトから pom.xml を作る
  • pom.xml をコピーする
  • プロジェクト全体をビルド、実行する

ビルドと実行はプロジェクト依存になるのではないかと思います。 pom.xml の生成とコピーを別にしているのは、それぞれ実行する時のディレクトリを変えれば、サブプロジェクト配下で実行すれば抽象化できると思っているのでとりあえず。

ただ、プロジェクトの立ち上げのタイミングではコピーで登録するコマンドは使えません。手作業でコピーするのが一番楽です。

ワークスペース構成を考える

こうなると、ワークスペースに複数のプロジェクトを配置できるとはいえ、マルチプロジェクトを使っている限りは複数プロジェクトを配置するのはやめたほうがよさそうです。というよりも、貧乏性を発揮してワークスペース共有するのは、プロダクションレベルの話ではやめたほうがいいでしょうね。

必要なプロダクション単位にワークスペースを構築し、共有することに価値があるのだと思いました。

この辺を考慮した自分用Stackを作ってみた

いちいちこういうコマンド構成を作ったりするのも面倒なので、最低限の構成を自分用にStackとしてつくってみることにしました。

ワークスペースの開発環境マシンにするDockerイメージを作る

Cedenvyが公式のJava-Gradleイメージを配布しているんですが、若干Gradleのバージョンが古いです。

github.com

というわけで、Gradleのバージョンを新しくして、ついでにDockerをインストール済みのイメージを作ります。

https://hub.docker.com/r/shinsukeabe/ubuntu-gradle-docker/

CodenvyにStackを登録

Codenvyメインメニューに「Stack」があります。ここを選択すると現在有効なStackの一覧が出てくるのですが、しれっと「Add Stack」ボタンがあります。ここでつくったStackがパブリックに有効なのかどうかはよくわかりませんが、DockerHubでつくったイメージを引っ張ってきて、かつコマンドの追加などもできるので、個人用のワークスペーステンプレートとして活用してもいいと思います。

f:id:mao_instantlife:20161119172148p:plain

というわけで、コマンド構成など作ってみました。

f:id:mao_instantlife:20161119172159p:plain

で、commitとgithubへのpushができないわけですが。。。

プロジェクトの構成は改善の余地はあるとしてベースはできてきました。ただですね、gitへのパスは通っているんですが、コミットとプッシュができない状態です。コミットはユーザ名とメールアドレスの問題のようなので割と早く解決しましたが、後者は正しいパスワードでも弾かれちゃったんでよくわかりません。

それも含めて今の所出ている課題は以下。

  • githubへのプッシュができない
  • .gitignoreの編集ができない(ファイル一覧に出ない、ターミナルにviが入っていない)

まだまだ先は長そうですなあ。なんでこういうのってムキになり始めるとコード書くよりも楽しくなるんですかねえ。書きかけの個人プロジェクト使ってやってますが、全くもって進捗がありませんよっと。