【问题标题】:how to compile src/test/java with maven when test code and main java code depends on the same jar file?当测试代码和主要java代码依赖于同一个jar文件时,如何用maven编译src/test/java?
【发布时间】:2010-10-28 14:12:59
【问题描述】:

我开始学习 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>

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

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

【问题讨论】:

  • 请您在这里给出正确的 pom sn-p...
  • 您所描述的应该不会导致问题:默认情况下,依赖项的范围适用于构建的所有阶段。请使用整个 POM 和运行 Maven 的输出进行编辑。
  • 我用更多细节更新了这个问题。有谁知道添加代码 sn-ps 的最佳方法(或步骤)是什么。当我使用“二进制”(10101)按钮时,我在格式化时遇到了很多麻烦。谢谢。

标签: maven-2


【解决方案1】:

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

那么JournalMonitor 既不是由com.mycompany.maven.testapp:domain:1.0:jar 提供的,也不是由当前项目提供的。它可能有助于澄清提供此类的工件。还请解释您如何“获得”domain 工件。请记住,像1.0 这样的固定版本的工件只下载一次(与-SNAPSHOT 工件相比),所以确保您在本地存储库中拥有的版本确实包含所需的东西。

我的测试代码也依赖于 fooBar.jar。

fooBar.jar 是什么?它在哪里声明?您发布的 POM sn-p 并未反映这一点。无论如何,它与当前的问题有什么关系?

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

你的意思是把依赖范围改成test吗?这很奇怪,compile 作用域依赖(默认作用域)在测试类路径上(参见Dependency Scope)。

有什么想法可以做到这一点吗?

您不必为此用例做任何特别的事情。还有其他的。

【讨论】:

    【解决方案2】:

    好吧,由于某种原因,我无法添加 cmets。我对此很陌生,所以我只想发布答案而不是评论。非常感谢帕斯卡的回答。你是对的,maven 处理这个没有我做任何特别的事情。问题是我没有告诉你们所有的细节。未能编译的测试有问题(它们在主干中提交,但不适合使用)。我试图将应用程序(基于ant的构建)移植到maven。这很痛苦,但它给了我一个教训。永远不要假设。我学习了很多与 Maven 相关的知识。我希望我能投票给你的答案,但我不能。

    【讨论】:

    • 我猜你不能发表评论,因为 1. 你没有使用与发布问题的人相同的帐户 2. 你没有足够的代表来处理这个问题。跨度>
    • 是的,当我发布原始问题时,我没有登录。所以在发布问题的过程中,我输入了我的电子邮件地址和姓名。但是,后来(在清理浏览器缓存之后)我可以登录的唯一方法是通过 OpenId(谷歌)。因此我猜想最终得到了两个不同的帐户——即使我使用的是同一个电子邮件帐户。
    猜你喜欢
    • 2016-02-04
    • 2016-12-18
    • 2014-11-19
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2015-10-25
    • 2016-08-05
    相关资源
    最近更新 更多