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

hogepiyoエンジニアリング

トラブルシューティングからノウハウ、作ってみた系まで扱う情報系ブログ

IntelliJ上でtomcat起動時にClassNotFoundExceptionがでるときの対処(Maven管理プロジェクト)

Eclipdeだと大概Assembly Deploymentでmavenを追加すれば直るわけですが、IntelliJだとそれに類する機能が見当たらないのでどうしましょっていう話

ClassNotFoundExceptionが出る原因

ビルドは通るくせにtomcat起動時にExceptionが出るもんだから「は?」となるがtomcatが参照するディレクトリにファイルが生成されていないことが原因

対処法

.javaファイルは $APP_HOME/WEB-INF/classes、ライブラリは $APP_HOME/WEB-INF/lib配下に置くようにする
置く場所を指定するにはpom.xmlに下記のように記述する
ライブラリに関しては結局コピーするくらいしか方法が見つからなかった
実は設定できるんだったら情報ほしいです。。

<project>

<!-- なんかその他設定 -->

<build>
  <plugins>
    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
	<configuration>
	<encoding>UTF-8</encoding>
	<source>1.8</source>
	<target>1.8</target>
	</configuration>
      </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <executions>
      <!-- copy-dependenciesで依存関係のあるライブラリをlibディレクトリにコピー -->  
      <execution>
        <id>copy</id>
	<phase>install</phase>
        <goals>
	  <goal>copy-dependencies</goal>
        </goals>
        <configuration>
	  <outputDirectory>web/WEB-INF/lib</outputDirectory>
        </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>

  <!-- .classファイルの出力先  -->
  <outputDirectory>web/WEB-INF/classes</outputDirectory>
</build>

</project>