JAVA - 无法将 src/test/java 导入 src/main/java

Nir*_*Tal 7 java eclipse testing maven

我创建了一个 E2E 测试项目,最初,所有 java 类都在“src/test/java”中,但现在我想将所有不包含测试的文件移动到“src/main/java”文件夹中,问题是在我这样做之后:
我无法将包从“src/test/java”导入到“src/main/java”(但可以做相反的事情)。就像导入的包根本不存在一样。

清理了项目并尝试通过 IDE 和 Maven 运行,但它不会改变结果。

在此处输入图片说明

我究竟做错了什么?

小智 7

绝对可以,一个人就能做到。。

首先您需要导航到Build Path-->Configure Build Path--> Source tab

然后在“源”选项卡中搜索/检查[您的项目名称] /src/main/java并更改

将“包含测试源”“否”改为“是”并保存。

这将成功解决从“src/test/java”导入包到“src/main/java”的问题


Sea*_*oyd 6

您在这里混淆了两个不同的概念:源文件夹和包。

源文件夹就是包含源的文件夹。在大多数现代项目中,您会发现两个这样的源文件夹,一个用于生产代码,另一个用于测试代码。在您的示例中(标准 Maven 目录布局,分别为 src/main/java 和 src/test/java)。

包是一种组织类的方式,这通常也反映在您的源代码中。按照惯例,测试和生产代码使用相同的包,例如生产类 com.mypackage.Foo 通常由名为 com.mypackage.FooTest 的类进行测试。按照惯例,这些包层次结构也映射到源中的目录层次结构。注意:虽然在 99.99999% 的情况下,出于理智的目的,您应该坚持此约定,但这实际上并不是一个要求。您可以独立于文件系统安排(在源端)来组织包。

无论如何,在标准设置中,您的目录布局可能如下所示:

src/main/java/com/mycompany/mypackage/SomeClass.java
src/test/java/com/mycompany/mypackage/SomeClassTest.java
Run Code Online (Sandbox Code Playgroud)

因此,生产类和测试类共享一个包,但位于不同的源文件夹中。此设置非常强大,因为它允许您的构建工具仅将生产代码导出到最终输出,同时为您的测试代码提供对其正在测试的代码的包级访问权限。测试代码和生产代码是独立编译的,生产代码不知道测试代码,这是应该的。

在您的情况下,测试文件夹中似乎有生产代码。要改变这一点,将代码移动到不同的包并不是解决方案。相反,您希望将代码移动到同一个包中,但位于生产文件夹中。如果您使用 IntelliJ,移动对话框允许您选择不同的源根目录,这正是您想要的,其他 IDE 将超越类似的功能。