Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java软件的Lite版本_Java_Plugins_Add In_Packaging - Fatal编程技术网

Java软件的Lite版本

Java软件的Lite版本,java,plugins,add-in,packaging,Java,Plugins,Add In,Packaging,我们的软件目前有很多功能。我被要求制作一个免费的试用版,其中包括一个完整软件的轻量级版本。在这次试验中,只有几个特定的功能可用。由于jar文件没有加密,我很想发布一个带有硬编码限制的完整版本。我希望能够有2个罐子:1个包含基本功能,1个包含高级功能 功能在不同的菜单中。如果代码在启动时尝试加载jar的额外功能,并在非付费用户选择高级菜单时显示一条消息(比如:此功能在试用中不可用),那就太好了。另一方面,有权访问advanced features jar的付费用户不会知道这两者之间的区别(我正在谈

我们的软件目前有很多功能。我被要求制作一个免费的试用版,其中包括一个完整软件的轻量级版本。在这次试验中,只有几个特定的功能可用。由于jar文件没有加密,我很想发布一个带有硬编码限制的完整版本。我希望能够有2个罐子:1个包含基本功能,1个包含高级功能

功能在不同的菜单中。如果代码在启动时尝试加载jar的额外功能,并在非付费用户选择高级菜单时显示一条消息(比如:此功能在试用中不可用),那就太好了。另一方面,有权访问advanced features jar的付费用户不会知道这两者之间的区别(我正在谈论的是现在的1个jar和新方法2个独立的jar之间的区别)

  • 有关于如何进行的提示吗
  • 对于常见的错误有什么需要避免的警告吗
  • 有没有比单独的罐子更好的策略

编辑:到目前为止,最好的建议描述了如何使用跛脚软件,但也警告我不要使用跛脚软件。那么我该怎么办呢?

许多技术都允许使用可插拔功能(通常称为插件或插件)

其思想是您的核心代码(或框架)声明一些接口(一个经过深思熟虑的API是理想的)。插件可以提供接口的新实现,并将其注册到框架中

在其引导序列中,您的框架将查看(通过某种约定,例如在一个文件中)是否有插件,并让它们有机会执行自己的引导序列,包括注册

在启动阶段之后,一个运行时示例(对于菜单):框架将其查找到存储菜单的注册表中。注册表包含框架自己声明的菜单,以及插件提供的任何附加项。。。它会显示所有这些

如果您特别想要您要求的行为,我将按如下方式实现:

  • 所有情况下可用的菜单都在框架中声明和实现
  • 仅在扩展版中可用的菜单将执行两次:
  • 在这个框架中,实现只需显示一条消息 (例如:此功能在试用中不可用
  • 在插件(=付费版)中,它将用真正的实现覆盖以前的实现,这才是真正的工作
这样,付费用户就拥有了所有正常功能,试用版会显示警告

有许多技术可以实现这一点,最佳选择取决于您已经知道/使用/感觉舒适的内容:

  • 接口实现是纯java的,插件jar清单中的字符串可以提到要启动的类
  • EclipseRCP以这种方式实现了菜单的完整实现(因此您将无需编写代码,只需配置)
  • 当您使用接口时,Spring也非常好

如您所述,您可能有两个罐子:

1包含基本功能和高级功能的存根。 1具有实际的高级功能

您可以使用带有配置设置的factory类来确定是创建存根类还是真正的类,例如“FancyFeatureClass”或“FancyFeatureClassStub”。“FancyFeatureClassStub”将包含在“lite”发行版中,但“FancyFeatureClass”将仅包含在advanced features jar中

如果他们试图更改配置设置来创建真正的类,而不让jar与真正的类一起使用,那么他们最终只会得到类NotFound错误

升级时,将advanced features jar添加到类路径,并更改配置设置,以告知factory类创建真正的类,而不是存根。假设您的应用程序可以通过这种方式拆分,它应该可以正常工作

至于常见的错误——我想你已经犯了一个——可能不是你的错:)


“跛脚软件”是一种评估产品的糟糕方法。发布一个功能齐全的版本,并带有过期或唠叨的屏幕,比发布一个残废的产品要好。没有这些高级功能可能会让人很难真正评估产品。

使用一个单独的Jar实现付费功能(以及一个单独的lite前端,如果得到ClassNotFoundException,它会显示一条合适的消息,如“NotAvailable”,这将是最简单的方法

有许多框架,包括EclipseRCP,用于以模块化的形式分发UI应用程序,但这对于您的需求来说是多余的


事实上,您甚至不需要两个Jar,只要您的构建过程可以选择编译/打包Jar中作为分发过程一部分构建的Java类的子集。只是不要包括付费功能。

谢谢你的回答。我喜欢。但是对于跛脚软件部分:正如我所说,jar软件是不加密的,所以发布完整的软件与开源是一样的(我们现在不想这样),因为源代码可以用最便宜的反编译器获得。跛脚软件仍然是最好的选择。@Silence:我不太担心反编译,因为这不会给你例如javadocs和注释,而且大多数软件都是如此庞大和复杂,以至于没有人真正有兴趣尝试了解它是如何工作的:)在我的公司,我们发布了整个软件,并且可以通过许可证文件启用功能。这样对我们(和客户)来说,事情就简单多了。规避许可并不难,但至少对于B2B软件来说,这种情况很少发生。比如说,想想支持吧。如果你有一个破解版本,如何获得它?@Silence-如果你的产品真的是人们想要盗版的东西,不管你做什么,它都会发生。所有这一切都是徒劳的