【发布时间】:2021-07-19 03:54:09
【问题描述】:
我正在处理一个项目,我们最终将计划开源该项目的部分源代码。项目的一部分涉及一些我们不想开源的IP。作为整个项目的一部分,我最终会拥有两个“包”
-
package Open- 这是开源部分 -
package IP- 这是封闭源代码部分,客户需要付费才能获得它
理想情况下,我想做类似以下的事情
package Open
class MyOpenClass (val hasIP: Boolean = false){
if(hasIP){
import IP
//do stuff with IP
} else {
//do stuff without IP
}
}
这似乎不起作用,因为在编译时找不到 IP。我想我可以创建一个虚拟的IP 包以包含在Open 项目中。这是一种可能性,但是我想看看是否有我遗漏的东西可以在不需要黑盒包的情况下解决这个问题。
【问题讨论】:
-
你不能只检查一个应该存在的特定类吗?类似this.
-
@ccheneson 如果包不可用,这似乎只是捕获?我会遇到包不可用但我不希望 scala 编译器抱怨它的情况。
-
包不可用的情况由
catch块处理。如果找不到包,Class.forName将抛出一个ClassNotFoundException,被catch块捕获,返回false; -
从逻辑上讲,应该是许可部分使用开放部分的相反方式。其他方法可以是使用类加载器(例如 - jdbc 如何加载不同的驱动程序配置文件)。