当我尝试在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
答案 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有关。我希望我能投票给你答案,但我不能。