如果一个项目的 Classpath 中缺少一些 类 ,它怎么可能运行良好?
How could possibly a project runs well when its Classpath is lack of some classes used in it?
有趣的是发现MultiTenantConnectionProvider.java
在我的项目中不存在,但我的项目可以maven构建并运行良好。
.
我使用的是 Intellij Idea 2016.2。由于 class 被打包在 mysql-connector-java-5.1.31.jar
中。所以我尝试连接到 mysql 数据库并查询一些数据以测试它是否正常工作。结果发现 class 的缺失并不影响项目的正常运行。这似乎不合逻辑,不是吗?
完全没有。大多数 JVM 实现都执行 lazy class 加载。这意味着:class 不会被 class 加载程序加载,直到 真正 需要它;例如,当一些其他代码实例化这样一个 class.
的对象时
换句话说:当您的应用程序没有抛出 ClassNotFoundException 时。一个 NoClassDefFoundError ... 结论是:执行的代码路径根本不需要加载 class。
喜欢:你可能会注意到你在派对上丢失了钥匙,直到你回到家并试图打开前门。
换句话说:如果您的程序在没有 class 的情况下构建和运行,那么 that class 就不会经常使用。
有趣的是发现MultiTenantConnectionProvider.java
在我的项目中不存在,但我的项目可以maven构建并运行良好。
我使用的是 Intellij Idea 2016.2。由于 class 被打包在 mysql-connector-java-5.1.31.jar
中。所以我尝试连接到 mysql 数据库并查询一些数据以测试它是否正常工作。结果发现 class 的缺失并不影响项目的正常运行。这似乎不合逻辑,不是吗?
完全没有。大多数 JVM 实现都执行 lazy class 加载。这意味着:class 不会被 class 加载程序加载,直到 真正 需要它;例如,当一些其他代码实例化这样一个 class.
的对象时换句话说:当您的应用程序没有抛出 ClassNotFoundException 时。一个 NoClassDefFoundError ... 结论是:执行的代码路径根本不需要加载 class。
喜欢:你可能会注意到你在派对上丢失了钥匙,直到你回到家并试图打开前门。
换句话说:如果您的程序在没有 class 的情况下构建和运行,那么 that class 就不会经常使用。