Configuration 属性是必需的,但未设置(无法为接口创建快照类)

Configuration 属性是必需的,但未设置(无法为接口创建快照类),configuration,liferay,liferay-7,Configuration,Liferay,Liferay 7,我的Liferay 7服务器一直在愉快地使用SomeModule,直到我部署了一个新版本的SomeModule,它有一个额外的必填字段favoriteColor 现在,每当我尝试加载portlet时,Liferay都会说: java.lang.RuntimeException: Unable to create snapshot class for interface some.SomeModuleConfiguration at com.liferay.portal.confi

我的Liferay 7服务器一直在愉快地使用
SomeModule
,直到我部署了一个新版本的
SomeModule
,它有一个额外的必填字段
favoriteColor

现在,每当我尝试加载portlet时,Liferay都会说:

java.lang.RuntimeException: Unable to create snapshot class for interface some.SomeModuleConfiguration
        at com.liferay.portal.configuration.metatype.bnd.util.ConfigurableUtil._createConfigurableSnapshot(ConfigurableUtil.java:77)
        at com.liferay.portal.configuration.metatype.bnd.util.ConfigurableUtil.createConfigurable(ConfigurableUtil.java:51)
        at some.SomeModule.activate(SomeModule.java:50)
...
aused by: java.lang.IllegalStateException: Attribute is required but not set favoriteColor
        at aQute.bnd.annotation.metatype.Configurable$ConfigurableHandler.invoke(Configurable.java:75)
        at com.sun.proxy.$Proxy1220.favoriteColor(Unknown Source)
        at some.SomeModuleConfigurationSnapshot407.<init>(Unknown Source)
java.lang.RuntimeException:无法为接口some.SomeModuleConfiguration创建快照类
位于com.liferay.portal.configuration.metatype.bnd.util.ConfigurableUtil.\u createConfigurableSnapshot(ConfigurableUtil.java:77)
在com.liferay.portal.configuration.metatype.bnd.util.ConfigurableUtil.createConfigurable上(ConfigurableUtil.java:51)
激活(SomeModule.java:50)
...
aused by:java.lang.IllegalStateException:属性是必需的,但未设置favoriteColor
位于aquete.bnd.annotation.metatype.Configurable$ConfigurableHandler.invoke(Configurable.java:75)
位于com.sun.proxy.$Proxy1220.favoriteColor(未知来源)
在some.SomeModuleConfiguration Snapshot407(未知源)
SomeModule
的配置UI未显示任何有关
favoriteColor
的信息


如何解决此问题,例如,通过将
favoriteColor
设置为其默认值?

如果您有幸拥有模块的源代码,您可以这样解决此问题:

  • 暂时将新字段设置为可选,但将
    SomeModuleConfiguration.java
    中的
    required=true
    替换为
    required=false
  • 部署模块
  • 加载配置页面,保存
  • 恢复到
    required=true
  • 再次部署

  • 欢迎选择答案

    另一种方法是使用OSGi配置文件来设置默认值和缺少的值。您可以像使用liferay附带的模块一样使用这些文件;e、 例如,elasticsearch配置。(查看osgi/configs目录)

    我讨厌liferay的原因