我正在使用IntelliJ和maven项目。我是IntelliJ的新手(而且几乎是maven)。我创建了一个新项目并且没有问题,但是我注意到当我在java /下创建一个新的子包时,我无法导入在java /中声明的类/接口。
我是否需要在子包文件中显式声明包名?如果未在pom文件中指定,默认情况下此包路径是什么?或者这是groupId?
答案 0 :(得分:4)
artifactId
中指定的groupId
和pom.xml
值与实际类无关。
它们用于帮助您对整个项目(罐子)进行分类,并且对项目内的类或包没有任何影响。
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
中的任何课程均无法访问AnotherClassTest
中的课程(例如src/main/java
)。
另一方面,src/main/java
中src/test/java
中的任何课程都可以访问{/ 1>}。