layer.xml 是netbeans开发富客户端应用程序非常重要的配置文件。 layer.xml定义了目录和文件组成netbeans运行时的配置信息和富客户端应用程序使用的信息。
下来看看layer.xml的自动生成,在上篇《NetBeans 模块开发简介》中,layer.xml的内容就是完全根据向导设置生成的,右键点击工程->netbeans 模块开发->Action(为菜单,工具栏等添加事件动作),在“GUI 注册”选择全局菜单,全局工具栏,为layer.xml生成如下内容:
<
folder
name
="Actions"
>
<
folder
name
="Tools"
>
<
file
name
="org-stoneyang-nbplugin-MyFirstAction.instance"
/>
</
folder
>
</
folder
>
<
folder
name
="Menu"
>
<
folder
name
="Tools"
>
<
attr
name
="org-openide-actions-ToolsAction.instance/org-stoneyang-nbplugin-separatorBefore.instance"
boolvalue
="true"
/>
<
file
name
="org-stoneyang-nbplugin-separatorBefore.instance"
>
<
attr
name
="instanceClass"
stringvalue
="javax.swing.JSeparator"
/>
</
file
>
<
attr
name
="org-stoneyang-nbplugin-separatorBefore.instance/org-stoneyang-nbplugin-MyFirstAction.shadow"
boolvalue
="true"
/>
<
file
name
="org-stoneyang-nbplugin-MyFirstAction.shadow"
>
<
attr
name
="originalFile"
stringvalue
="Actions/Tools/org-stoneyang-nbplugin-MyFirstAction.instance"
/>
</
file
>
<
attr
name
="org-stoneyang-nbplugin-MyFirstAction.shadow/org-stoneyang-nbplugin-separatorAfter.instance"
boolvalue
="true"
/>
<
file
name
="org-stoneyang-nbplugin-separatorAfter.instance"
>
<
attr
name
="instanceClass"
stringvalue
="javax.swing.JSeparator"
/>
</
file
>
<
attr
name
="org-stoneyang-nbplugin-separatorAfter.instance/Separator1.instance"
boolvalue
="true"
/>
</
folder
>
</
folder
>
<
folder
name
="Toolbars"
>
<
folder
name
="Build"
>
<
attr
name
="org-netbeans-modules-project-ui-RunMainProject.shadow/org-stoneyang-nbplugin-MyFirstAction.shadow"
boolvalue
="true"
/>
<
file
name
="org-stoneyang-nbplugin-MyFirstAction.shadow"
>
<
attr
name
="originalFile"
stringvalue
="Actions/Tools/org-stoneyang-nbplugin-MyFirstAction.instance"
/>
</
file
>
<
attr
name
="org-stoneyang-nbplugin-MyFirstAction.shadow/org-netbeans-modules-project-ui-DebugMainProject.shadow"
boolvalue
="true"
/>
</
folder
>
</
folder
> netbeans使用虚拟文件结构表示使用者文件和netbeans本身配置文件。 我们可以想象netbeans本身可以这样表示:
< filesystem
>
<
folder
name
="Actions"
>
。。。
</
folder
>
<
folder
name
="Menu"
>
。。。
</
folder
>
<
folder
name
="Toolbars"
>
。。。
</
folder
>
<
folder
name
="..."
>
。。。
</
folder
>
<
filesystem
>
回过头来看看layer.xml的内容,它特有的表示法,也就是將所有的『 . 』换成『 - 』。类似于文件结构,要在一个特定的菜单下加入一个菜单项,需要在其folder节点下添加file节点,然后添加相应的属性,originalFile属性说明调用的实际java类。
layer.xml最重要的作用是使得应用动态安装成为可能,开发者可以监听文件系统中目录和文件的变化,当应用处于运行时,UI就会更新来反映相应的变化。
现在高版本的netbeans会自动生成layer.xml,自己可以手动添加自己需要的内容,而不需使用向导,例如在开发服务器管理插件时,我们可以手动添加如下内容:
< folder name
="J2EE"
>
< folder
name
="DeploymentPlugins"
>
< folder
name
="MyServer"
>
< file
name
="Descriptor"
url
="nbdep.xml"
/>
< file
name
="Factory.instance"
>
< attr
name
="instanceCreate"
methodvalue
="org.stoneyang.yqserver.MyDeploymentFactory.create"
/>
< attr
name
="instanceClass"
stringvalue
="org.stoneyang.yqserver.MyDeploymentFactory"
/>
< attr
name
="instanceOf"
stringvalue
="javax.enterprise.deploy.spi.factories.DeploymentFactory"
/>
</ file
>
< file
name
="RegistryNodeFactory.instance"
>
< attr
name
="instanceClass"
stringvalue
="org.stoneyang.yqserver.nodes.MyRegistryNodeFactory"
/>
< attr
name
="instanceOf"
stringvalue
="org.netbeans.modules.j2ee.deployment.plugins.api.RegistryNodeFactory"
/>
</ file
>
< file
name
="J2eePlatformFactory.instance"
>
< attr
name
="instanceCreate"
newvalue
="org.stoneyang.yqserver.MyJ2eePlatformFactory"
/>
< attr
name
="instanceClass"
stringvalue
="org.stoneyang.yqserver.MyJ2eePlatformFactory"
/>
< attr
name
="instanceOf"
stringvalue
="org.netbeans.modules.j2ee.deployment.plugins.api.J2eePlatformFactory"
/>
</ file
>
< file
name
="OptionalFactory.instance"
>
< attr
name
="instanceCreate"
newvalue
="org.stoneyang.yqserver.MyOptionalFactory"
/>
< attr
name
="instanceClass"
stringvalue
="org.stoneyang.yqserver.MyOptionalFactory"
/>
< attr
name
="instanceOf"
stringvalue
="org.netbeans.modules.j2ee.deployment.plugins.api.OptionalDeploymentManagerFactory"
/>
</ file
>
< file
name
="ConfigurationSupportImpl.instance"
>
< attr
name
="instanceCreate"
newvalue
="org.stoneyang.yqserver.ConfigurationSupportImpl"
/>
< attr
name
="instanceOf"
stringvalue
="org.netbeans.modules.j2ee.deployment.plugins.api.ConfigurationSupport"
/>
</ file
>
< folder
name
="DeploymentFileNames"
>
< folder
name
="WAR"
>
< file
name
="WEB-INFmyserver-web.xml"
/>
</ folder
>
</ folder
>
</ folder
>
</ folder
>
</ folder
>
最后,layer.xml的存放位置可以随意改动,在工程的模块清单中修改
OpenIDE-Module-Layer:对应值即可