1

我有一个我们公司使用的仪表板库。它有一个初始化器。wicket.properties 文件与其余代码存储在同一个包中,而不是 META-INF 文件夹中。升级到 Wicket 7 后,我开始注意到以下警告:

/wicket.properties 位置已弃用。请将文件移动到 /META-INF/wicket/ 文件夹并给它一个与您的包名称匹配的名称,例如 com.example.myapp.properties

所以我想,没问题,我会按照写得很好的消息中的说明移动属性文件并重命名它。我将文件重命名为 com.redi.wicket.dashboard.properties 并将其移至 META-INF/wicket 文件夹。现在我收到以下警告:

/META-INF/wicket/*.properties 在 OSGi 和单 jar 环境中不起作用,不再受支持!请参阅https://issues.apache.org/jira/browse/WICKET-5997了解更多详细信息,并报告仍在使用它的库的问题。

我查看了 WICKET-5997、WICKET-6030 和 WICKET-5713 并试图拼凑出我应该做的事情。

我注意到在 Application 类中有一些已弃用的方法,其中一个是 collectWicketProperties,将在 7.3.0 中删除。所以我想在我脑海中浮现的时候修复它,而不是在我升级时让它咬我。

那么我应该把我的初始化属性文件放在哪里,我给它起什么名字呢?

谢谢

4

1 回答 1

3

我通过查看 org.apache.wicket.Application 的代码发现了这一点。在这里,开发人员提到您应该将 ServiceLoader 类用于 Initializers。https://issues.apache.org/jira/browse/WICKET-5997。我注意到了 Application.initInitializers 方法并看到了他们正在谈论的 ServiceLoader 类。

所以我阅读了 java.util.ServiceLoader 类,它说明了以下内容:

通过在资源目录 META-INF/services 中放置提供者配置文件来识别服务提供者。该文件的名称是服务类型的完全限定二进制名称。该文件包含具体提供程序类的完全限定二进制名称列表,每行一个。

因此,我创建了一个 META-INF/services 文件夹并放置了一个名为 org.apache.wicket.IInitializer 的文本文件,并在该文件中放置了我的 IInitializer 实现的完全限定类名。

警告消失了,我的初始化程序在应用程序启动时被调用,这正是我想要的。

注意:如果您从使用 wicket.properties 进行迁移,请确保取出文件的“initializer=”部分。新方法不是属性文件,因此它没有键值对。它只有完全限定的类名,由新行分隔。如果您需要更多详细信息,请参阅 java.util.ServiceLocator 文档。

此外,如果您使用 maven,META-INF/services 文件夹将位于 src/main/resources 中。

于 2016-01-12T15:59:58.827 回答