專案結構長這樣:
com.company.project
└── java.util.mytools ← 看起來很合理?
└── MyClass.java
編譯通過,執行卻拋出:
Error: A JNI error has occurred...
java.lang.SecurityException: Prohibited package name: java.util.mytools
JVM 類載入器強制封鎖:所有以 java.、javax.、sun.、com.sun. 開頭的包名均屬保留命名空間,僅限核心類庫使用。違者在 ClassLoader.defineClass 階段直接拋 SecurityException。
com.company、org.apache)project.moduleservice、repository、config、utilcom.company.project.service.user| 錯誤包名 | 原因 | 修正範例 |
|---|---|---|
| java.utils | 保留前綴 | com.myapp.utils |
| javax.servlet | 保留前綴 | com.myapp.web.servlet |
| sun.misc | 保留前綴 | com.myapp.internal |
| com.sun.tools | 保留前綴 | com.myapp.build |
| MyUtils | 大寫字母 | myutils |
| com.my_app | 含底線 | com.myapp |
# SpotBugs / Error Prone 規則
^java\.|^javax\.|^sun\.|^com\.sun\.