package-info.java

简介: package-info.java 文件估计大家见过但是自己却很少去创建和使用它、因为对于一般应用来说可能真的太少见了。

package-info.java 文件估计大家见过但是自己却很少去创建和使用它、因为对于一般应用来说可能真的太少见了。


它的作用主要是三个

  • 描述包
  • 使用注解修饰包、达到修饰该包下的类
  • 声明包中使用的类和常量(这个比较少用)


描述包


package-info.java 文件

/**
 * 我是描述信息
 */
package com.demo.test.info;
复制代码

网络异常,图片无法展示
|

生成 JavaDoc 可以看到包的注释在说明列中


使用注解修饰包


假如某个包下、我们希望所有的返回值都应该非 Null、并且当我们编码的时候可以警告我们

那么我们可以在 package-info.java 文件中

@NonNullApi
package com.demo.test.info;
import org.springframework.lang.NonNullApi;
复制代码

网络异常,图片无法展示
|

可以调整为 Error 那么就会要求必须返回非 null 否则会影响编译。

当然除了返回值为非 null 、还会有其他的需求、比如说参数、成语变量、甚至 Deprecated 包中的所有类、都可以在 package-info 中进行修饰。

当然这个只限于当前包、没办法让子包继承父包的相关信息、所以每个子包都需要某个特性、那么就需要每个子包创建 package-info 文件。


声明类和常量


这个跟我们自己声明一个没有修饰符修饰的类是一样的、只不过是放在 package-info 文件中

@ParametersAreNonnullByDefault
@NonNullFields
@NonNullApi
package com.demo.test.info;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;
import javax.annotation.ParametersAreNonnullByDefault;
class Constant{
    public static final String NAME = "CoderLi";
}
复制代码

最终使用了 org.eclipse.jdt.annotation 插件的注解声明非空


Maven 插件


最近组内想所有的返回值、所有的方法参数、类中的成员变量如果没有声明可以为 null 默认都是非 null

所以想着使用 package-info 来警告提示、本来想着写个 idea 插件每当创建 package 的时候勾选是否创建对应 package-info 文件、文件内容是个模板、如上面的代码。后来因为项目中存在某些框架非得要 eclipse 这个 ide (在 eclipse 基础上进行过改造)、不得已使用 maven 插件

当然可以直接使用 eclipse 的 jdt 包的注解NonNullByDefault

分享一篇相关的文章

juejin.cn/post/684490…

通过 maven 插件绑定到其中一个 phase 即可在使用 maven 的某个 phase 中递归创建 package-info 文件、当然也可以绑定 idea 运行前执行该插件的 goal 、这样子就能不执行 maven 命令就可以为每个 package 创建对应的 package-info 文件。



目录
相关文章
|
3月前
|
Java 数据安全/隐私保护
Java 包(package)的使用详解
Java中的包(`package`)用于组织类和接口,避免类名冲突并控制访问权限,提升代码的可维护性和可重用性。通过`package`关键字定义包,创建相应目录结构即可实现。包可通过`import`语句导入,支持导入具体类或整个包。Java提供多种访问权限修饰符(`public`、`protected`、`default`、`private`),以及丰富的标准库包(如`java.lang`、`java.util`等)。合理的包命名和使用对大型项目的开发至关重要。
187 2
|
4月前
|
Java Maven 数据库
|
6月前
Failed to bind properties under ‘logging.level‘ to java.util.Map java.lang.String, java.lang.String
Failed to bind properties under ‘logging.level‘ to java.util.Map java.lang.String, java.lang.String
44 0
|
Java
【异常】Failed to bind properties under ‘logging.level‘ to java.util.Map<java.lang.String, java.lang.Str
【异常】Failed to bind properties under ‘logging.level‘ to java.util.Map<java.lang.String, java.lang.Str
264 0
|
Java
SpingBoot2.x文件上传:failed to convert java.lang.String to org.springframework.util.unit.DataSize
SpingBoot2.x文件上传:failed to convert java.lang.String to org.springframework.util.unit.DataSize
411 0
|
存储 网络协议 Java
java基础 --- java包(package)
java基础 --- java包(package)
129 0
|
Java
什么是package-info.java
什么是package-info.java
423 0
|
Java 测试技术
Cannot instantiate test(s): java.lang.SecurityException: Prohibited package name: java
Cannot instantiate test(s): java.lang.SecurityException: Prohibited package name: java
Cannot instantiate test(s): java.lang.SecurityException: Prohibited package name: java
com.google.common.base.Preconditions.checkNotNull(Preconditions.java:877)
com.google.common.base.Preconditions.checkNotNull(Preconditions.java:877)
91 0
|
Java 编译器
Java - package & import
Java - package & import
113 0
Java - package & import