Intellij IDEA

Intellij Idea Test Module互相依赖如何处

2015-11-22  本文已影响3950人  曲水流觞TechRill

Intellij Idea, Test Module Dependency, 2015-11-22

今天在搭建CAS Server的时候,cas-server-support-jdbc作为其中一个module,test目录下的QueryDatabaseAuthenticationHandlerTests 依赖 cas-server-core test下的TestUtils, 而cas-server-core 包内的test又不会导出到jar包,除非在cas-server-core 的Sources中将test目录“Mak as Sources”而不是“Test”,但这样就会把Junit导出到Jar包了,不妥,应该如何操作最好呢?

简单说:

你有 Module-AModule-B.
Module-B test目录下有一个Junit Test依赖了来自Module-A test目录下的TestUtils,出现编译错误,怎么办?


jdbc.JPG
core.JPG
Test Source Folders.JPG

方案一(更新了方案二啦)

  1. 打开 Project Structure... (Ctrl+Alt+Shift+S - win/linux)
  2. 先选择Modules中被依赖的cas-server-core 中的** Path** Tab页,记录下“Test output path”中的路径并拷贝. 路径大约是这样:

D:\Dev\CAS\mm-cas\cas-server-core\target\test-classes

  1. 继续选择 cas-server-support-jdbc并查看Dependencies Tab页。
    这里可能已经有了Scope=comiple的对cas-server-core的依赖,点击+ 或者快捷(Alt+Insert)添加“Libirary...”。

  2. Choose Libraries对话框中选择New Library... 按钮,继续选择 Java 选项,在弹出的"Select Library Files"的对话框中,输入刚才第二步中的路径 D:\Dev\CAS\mm-cas\cas-server-core\target\test-classes, 点击OK。现在这里就有了cas-server-core中的Test类,输入一个合理的名字,在Level中选择Module Library。可以再点击 + 添加一下源代码,比如 D:\Dev\CAS\mm-cas\cas-server-core\src\test,这样你也添加好源代码文件了。。

    Library.JPG
    module lib.JPG
  3. 一路点击OK回到Project Structure, 现在你就有一个名为cas-server-core-test-classes的module级别的library了, 将其Scope改为Test。(参照底部的说明)

  4. 点击OK,Rebuild Project,大功告成!


    成功.JPG

方案二

1 在Module-A的POM.xml中添加BUILD,创建test-jar
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

这个插件就是为test classes打成一个jar包的

[>>点击这里查看MAVEN官方链接](http:https://img.haomeiwen.com/i285398/b4c06ff83dd971ba.JPG?imageMogr2/auto-orient/strip%7CimageView
https://maven.apache.org/plugins/maven-jar-plugin/test-jar-mojo.html)
jar:test-jar
Full name:
org.apache.maven.plugins:maven-jar-plugin:2.6:test-jar
Description:
Build a JAR of the test classes for the current project.
Attributes:
Requires a Maven project to be executed.
Requires dependency resolution of artifacts in scope:test
.
The goal is thread-safe and supports parallel builds.
Binds by default to the lifecycle phase:package

2 在module-B的POM文件中添加对这个test-jar的依赖

   <dependency>
        <groupId>cn.myproject.test</groupId>
        <artifactId>module-A</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
    </dependency>

3 reimport maven,完美解决!


以下为相关阅读:##

https://www.jetbrains.com/idea/help/dependencies-tab.html#dependencyscope
Scope. This setting lets you control the classpath separately for your sources and test sources, and for the build and the run phases.
(The classpath may be different when

  1. your sources are compiled
  2. your test sources are compiled
  3. your compiled sources are run
  4. your tests are run.
    The Scope option defines the classpaths in which the dependency is to be included.)

Select the necessary option from the list:
Compile. The dependency is included in the classpath for your sources and test sources at the compilation and run phases.
Test. The dependency is included in the classpath only for your test sources at the compilation and run phases.
Runtime. The dependency is included in the classpath for your sources and test sources but only at the run phase.
Provided. For your sources, the dependency is included in the classpath only at the compilation phase. This is useful when there is a container (e.g. a web container of an application server) that provides the corresponding dependency at runtime.For your test sources, the dependency is included in the classpath both at the build and run phases.
Application server libraries, normally, are included in dependency lists with the scope Provided.

顺带再来一个说明:
If a module (module A) depends on another module (module B), IntelliJ IDEA assumes that:

- The sources of module A depend on the sources in module B and don't depend on its test sources.
- The test sources of module A depend on the sources and the test sources of module B.
上一篇下一篇

猜你喜欢

热点阅读