0

我将 IntelliJ 与 Maven 项目一起使用。我是 IntelliJ 的新手(而且几乎是 Maven)。我创建了一个新项目并且正在构建没有问题,但是我注意到当我在 java/ 下创建一个新的子包时,我无法导入在 java/ 中声明的类/接口。

我需要在子包文件中显式声明包名吗?如果没有在 pom 文件中指定,这个包路径默认是什么?或者这是groupId?

4

1 回答 1

4

中指定的artifactIdgroupIdpom.xml与实际类无关。

它们用于帮助您对整个项目(jar)进行分类,并且对项目内的类或包没有影响。

Maven默认文件夹结构:

src
|
|--main
|  |
|  |--java
|  |  |
|  |  |--com
|  |  |  |
|  |  |  |--mypackage
|  |  |     |
|  |  |     |--MyClassA.java
|  |  |     |
|  |  |     |--submypackage
|  |  |        |
|  |  |        |--SomeOtherClass.java
|  |  |--net
|  |     |
|  |     |--netpackage
|  |        |
|  |        |--MyNetClassA.java
|  |
|  |--resources
|
|--test
   |
   |--java
   |  |
   |  |--com
   |     |
   |     |--anotherpackage
   |        |
   |        |--AnotherClassTest.java
   |
   |--resources

如果你想,从MyNetClassA,使用MyClassA,你会得到类似的东西:

MyNetClassA.java文件内容:

package net.netpackage;

import com.mypackage.MyClassA;

public class MyNetClassA {
    MyClassA myField;
}

同样的事情也适用于子包:如果你想,从MyClassA,使用SomeOtherClass,你会有类似的东西:

MyClassA.java文件内容:

package com.mypackage;

import com.mypackage.subpackage.SomeOtherClass;

public class MyClassA {
    SomeOtherClass myOtherField;
}

一个包是否在另一个包下面声明并不重要。你称它为“子包”,但对于 Java,它只是一个不同的包。

此外, 中的任何类都不能访问 中的任何类src/test/java(例如) 。AnotherClassTestsrc/main/java

另一方面, 中的任何类src/main/java 可以访问src/test/java

于 2013-04-13T04:58:34.233 回答