【问题标题】:importing a possibly undefined package导入可能未定义的包
【发布时间】: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 如何加载不同的驱动程序配置文件)。

标签: java scala package


【解决方案1】:

Can we do conditional imports in Scala?

这确实是我要问的。只是在搜索过程中没有使用正确的“条件”术语。

这也可能是另一种解决方案

Scala conditional compilation

许可部分包括开放部分的问题在于,对于这个特定项目,许可部分是开放部分的子集。我能给出的最好的例子是一个汽车类比,其中开放部分是车身,封闭部分是发动机。默认情况下,您将获得速度较慢的开放版本引擎,但如果您为许可版本付费,您将获得更大/更高效的引擎。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    相关资源
    最近更新 更多