かまたま日記3

プログラミングメイン、たまに日常

Intellij IDEAで依存関係のあるモジュールがあるプロジェクトをリンクさせる

開発中に例えばcoreロジックのモジュールとwebモジュールを分けて開発しているときに
webモジュールが依存しているcoreモジュールをローカルのプロジェクトに向けたいときがあるかと思います。

そんなときの方法をメモっておきます。
(もっと簡単な方法があれば教えてください)
ちなみにIntellij IDEAのバージョンはultimate editionの12.0.4です。

前提

  • sample-core
    • coreロジックのモジュール、プロジェクト構成はこんな感じ

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
    <groupId>com.kamatama41</groupId>
    <artifactId>sample-core</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>
SampleService.java
package com.kamatama41.sample;

public interface SampleService {
	void doSomething();
}
SampleServiceImpl .java
package com.kamatama41.sample;

public class SampleServiceImpl implements SampleService {
	@Override
	public void doSomething() {
		System.out.println("test.");
	}
}
  • sample-web
    • webモジュール、プロジェクト構成はこんな感じ

pom.xml
<?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>com.kamatama41</groupId>
    <artifactId>sample-web</artifactId>
    <version>1.0-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>com.kamatama41</groupId>
			<artifactId>sample-core</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
	</dependencies>
</project>
SampleController.java
package com.kamatama41.sample;

public class SampleController {

	private static SampleService sampleService;

	public static void main(String[] args) {
		sampleService = new SampleServiceImpl();
		sampleService.doSomething();
	}
}

手順

sample-webを開いている方のウインドウの[Project Structure]->[sample-web]->[Dependency]タブを開く。
以下のような感じになっているハズなので、左上の方の+(Add)を押して[Import Module]を選択します。

importしたいプロジェクト(sample-core)の.imiファイルを選択します。

sample-webの[Dependency]タブを開いて、右側にある小さ目の+(Add)から
[3. Module Dependency]を選択し、先ほどインポートしたsample-coreを選択します。

追加したsample-coreプロジェクトの依存性をMavenの依存性の上に持ってきます。
あとはApplyもしくはOKで終了。