読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

JDK1.5以上で最近のeclipseのWTPにtomcat6の動的webプロジェクトを追加する

eclipse java

実はserversにtomcat6を追加する方法、あるんですよこれが。ちょっと古めの環境で萎えている方も最新のeclipseを使ってみませんか?
f:id:treeapps:20150829221423p:plain

JDKも1.9の話が出始め、tomcat8も正式リリースされ、javaを取り巻く環境は新しくなっていますね。

しかし、


オンプレミス環境、政治的理由によりAWSが使えない。各種ミドルウェアの更新もほぼできない環境。そんな私達は未だにJDK1.6 + tomcat6である。

なんていう方はまだまだ沢山いると思います。JDK1.3が余裕で現役の場合もありますね。実に闇が深い業界です。しかしこれでへこたれてはいけません。せめて最新のeclipseくらい使って抗いましょう。

本当はeclipse marsを使いたいところですが、javaのコードフォーマッターがバグっているっぽく、フォーマット結果が異なってしまうため、gitやsvnで無駄に差分が出てしまうので、暫く様子を見たほうがいいです。

やるお、serversにtomcat6を追加する


よーし、eclipse lunaのDLも完了した。tomcatは8入れたいけど6で我慢。さて、ではserversからtomcatを追加するか。

f:id:treeapps:20150829223002p:plain

ん?あれ?

f:id:treeapps:20150829223454p:plain

Tomcat version 6.0 only supports J2EE, 1.2, 1.3, 1.4 and Java EE 5


諦めるなやるお!まだ勝負はおわっちゃいないぞ!回避方法はある!


気休めはやめてくれよ・・・対応してないってはっきり書いてあるよ・・・


確かに「表面上は」追加できない。しかしな、あくまでウィザードから追加はできないだけなんだ。まずはさっきのtomcat6は古いJDKしか対応してねーよエラーの状態で、プロジェクトを追加せずそのままFinishしてサーバを追加しろ。

f:id:treeapps:20150829224541p:plain

中身が空っぽのserversが追加されたよ。どーすんのさこれ・・・


よし、いいぞ。Package ExplorerにServersプロジェクトが追加され、その中に「Tomcat v6.0 Server at localhost-config」というフォルダが追加されたな?serversを追加した時に自動で作られるやつだな。その中のserver.xmlを開くんだ。

f:id:treeapps:20150829225511p:plain

開いたよ。


よし、じゃあserver.xmlを次のように修正して保存するんだ。

変更前
<?xml version="1.0" encoding="UTF-8"?><
<Server port="8005" shutdown="SHUTDOWN">
    <Service name="Catalina">
        <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

        <Engine defaultHost="localhost" name="Catalina">
            <Host appBase="webapps" autoDeploy="true" name="localhost"
                unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
            </Host>
        </Engine>
    </Service>
</Server>

※ 解りやすいように色々削除して整形しています。

変更後
<?xml version="1.0" encoding="UTF-8"?><
<Server port="8005" shutdown="SHUTDOWN">
    <Service name="Catalina">
        <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

        <Engine defaultHost="localhost" name="Catalina">
            <Host appBase="webapps" autoDeploy="true" name="localhost"
                unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
                <Context docBase="gradle-web" path="/gradle-web" reloadable="false" source="org.eclipse.jst.jee.server:test" /> ★これを追加
            </Host>
        </Engine>
    </Service>
</Server>


修正して保存したよ。


さあやるお、serversの設定を開いて、Modulesタブを確認してみるんだ。

f:id:treeapps:20150829230313p:plain

うっそ!!なんか追加されてるんですけど!!

f:id:treeapps:20150829230734p:plain

な?諦めなくてよかったろ?serversのビュー上は紐付きが無いように見えるが安心しろ。ちゃんとtomcatを起動するとプロジェクトがロードされるぞ。serversのビューはあくまで表示だけで、設定の実体はserver.xmlだから無関係なんだなこれが。


まじで助かったよやらないお!


やかったな。あ、確か同じようなこと言ってたやつが20人ほどいたんだが、ちょっと教えてやってくれよ。な?


ちょっとコンビニ行ってくる

雑感

よくプロジェクトの環境構築手順書にeclipseについて書かれているんですが、バージョンによってこの問題が起きたりして困るんですよね。確かeclipse3系の時はこんな警告無しに追加できてたと思うんですが、4.1だか4.2くらいから追加されたみたいですね。鬱陶しいです。

もしgit等でtomcatのconfをバージョン管理している場合、serversの設定のGeneral InformationタブのConfiguration path欄のBrowseをクリックして、gitで管理しているconfをフォルダを選択すると、プロジェクト専用のconfを読み込む事ができます。そのconf/server.xmlに以下を記述しておけば、前述と同様にtomcat6環境でもJDK1.8のプロジェクトを追加する事も可能です。

<Context docBase="gradle-web" path="/gradle-web" reloadable="false" source="org.eclipse.jst.jee.server:test" />

結構古いeclipseを頑なに使い続ける方もいますが、Eclipseマーケットプレイスが無かったり、色々不便になることも増えると思うので、可能な限り最新のeclipseを使っていきたいですね!