在maven中,如果我创建一个子包,那么主包是如何引用的?

时间:2013-04-13 04:44:21

标签: java maven intellij-idea

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

我是否需要在子包文件中显式声明包名?如果未在pom文件中指定,默认情况下此包路径是什么?或者这是groupId?

1 个答案:

答案 0 :(得分:4)

artifactId中指定的groupIdpom.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/javasrc/test/java 中的任何课程都可以访问{/ 1>}。