当测试代码和主要java代码依赖于同一个jar文件时,如何用maven编译src / test / java?

时间:2010-10-28 14:13:00

标签: maven-2

当我尝试在maven项目中编译测试源代码时,我开始学习Maven并遇到了问题。

我的主java源代码依赖于一个jar文件,所以我在我的pom文件中声明了一个依赖关系如下:

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>myMavenApp</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>


    <dependency>
        <groupId>com.mycompany.maven.testapp</groupId>
        <artifactId>domain</artifactId>
        <version>1.0</version>          
    </dependency>

编译测试代码时编译错误:

[ERROR] \ projects \ news \ publishing \ src \ test \ java \ com \ mycompany \ transformers \ monitoring \ JournalMonitorTest.java:[40,30]找不到符号 [错误]符号:类JournalMonitor [错误]位置:类com.mycompany.transformers.monitoring.JournalMonitorTest

2 个答案:

答案 0 :(得分:1)

  

编译测试代码时编译错误(...)

JournalMonitor既不是com.mycompany.maven.testapp:domain:1.0:jar也不是当前项目提供的domain。它可能有助于澄清提供此类的工件。请解释您如何“获取”1.0工件。请记住,具有-SNAPSHOT等固定版本的工件只下载一次(vs fooBar.jar工件),因此确保您本地存储库中的版本确实包含所需的东西。

  

我的测试代码也取决于fooBar.jar。

什么是test?宣布在哪里?您发布的POM代码段并未反映出这一点。无论如何,它与当前的问题有什么关系?

  

所以有了上面的依赖,我可以编译我的主要源代码而不是测试代码。当我使用test时,我可以编译测试源但不能编译主应用程序源。

您的意思是将依赖范围更改为compile吗?这非常奇怪,{{1}}范围的依赖项(默认范围)位于测试类路径上(请参阅Dependency Scope)。

  

任何想法如何做到这一点?

您不必为此用例做任何特殊操作。还有其他的东西。

答案 1 :(得分:0)

好吧,我出于某些原因无法添加评论。我对此很新,所以我只想发一个答案而不是评论。非常感谢Pascal的回答。你是对的,maven处理这个没有做任何特别的事情。问题是我没有给你们所有细节。未能编译的测试存在问题(它们是在主干中提交但不构建为存在)。我试图将应用程序(基于ant的构建)移植到maven。这很痛苦,但它认为我是一个教训。永远不要假设我有很多学习与maven有关。我希望我能投票给你答案,但我不能。