emahiro/b.log

日々の勉強の記録とか育児の記録とか。

GoglandでFWのsrc配下のvendorを参照しなくなった時

前置き

ginやechoと言ったgoのwebフレームワーク(FW)を使って開発するときに、glideみたいなパッケージ管理ツールを使って依存パッケージを管理しているケースはよくあると思います。

その依存パッケージの管理ディレクトリはプロジェクトルートではなく、用途によっては src/ProjectName/vendor みたいにFWのsrcディレクトリの配下に置くことも往々にしてあると思います。

起きた問題

僕はgoで開発するときにatomを使ってましたが、イマイチ使い勝手悪くなってしまったので、intellijさんのgogland(まだEAP)を使っています。
しかし、このgogland(EAP)をバージョンアップしたらそれまで開けていたプロジェクトでフレームワーク(FW)のsrc配下のvendorを参照せずにGlobalなGOPATHのsrc配下を参照するようになってしまってプロジェクトに入れていたパッケージを参照できず、プロジェクトはビルドできるがgogland上ではエラーが表示されまくったり、メソッドジャンプできなくなるっていう無能ツールになってしまったのでどう治したのかっていう備忘録です。

試したこと

.ideaファイルを消す

プロジェクト毎に設定等を管理している .idea ファイルを消しました。
効果はありませんでした。

プロジェクトを入れ直す。

プロジェクトディレクトリをcloneし直しました。
効果はありませんでした。

ここまで試して結構困りました。

原因がプロジェクトごとに direnv で設定しているGOPATHではなく、なぜか GLOBALなGOPATHを参照してしまっていたからです。

最終的にこのGOPATHをプロジェクトごとに変更してやれば良さそうなのですが、この方法がわからず。。。

手動で追加

最終的に行き着いた方法が Project Structure でプロジェクトのROOTを個別に指定するっていう方法でした。

f:id:ema_hiro:20170811022330p:plain

この画面で 「Add Content Root」で該当のプロジェクトROOTになっている箇所をsrc以下に設定。そのとかJSファイルのディレクトリ等も追加しておくとgoglandのプロジェクトファイルに追加されます。

かなり対処療法的な内容になりましたが、一応これで動作するようになりました。

どうしてGLOBALなGOPATHを参照してしまうのか? という疑問は全く解消してません。