GeoServer后台管理web功能扩展
后台管理项目是用spring管理,UI用的wicket框架,此框架不熟悉,参照官方doc能写个大概的例子。以下是例子。
前提:需要下载GeoServer的源码,maven编译通过后,可以导入eclipse等IDE。以下是我整个geoServer项目的结构。
工作空间:我的结构是:D:\workspace\geoserver\src,当然我对maven也是一知半解,故导入的项目也是7788.不过都能够编译通过的。GeoServer的所有子模块(Model)的pom.xml都会继承他提供的根pom.xml,当然在实际扩展某些功能的时候,他的pom.xml我也有经过改动的。因为根据官方的例子,有的编译不通过,比如:扩展pom.xml中的依赖,如:
<dependencies>
<dependency>
<groupId>org.geoserver.web</groupId>
<artifactId>web-core</artifactId>
<version>2.5-SNAPSHOT</version>
</dependency>
</dependencies>
注意version这个,官方例子貌似还是2.0.这个时候,就需要根据你下载的版本进行更改了。这个版本在你从git下载的源码包里的pom.xml能查到,如我geoserver父pom.xml的:
<modelVersion>4.0.0</modelVersion>
<groupId>org.geoserver</groupId>
<artifactId>geoserver</artifactId>
<packaging>pom</packaging>
<version>2.5-SNAPSHOT</version>
<name>GeoServer</name>
<groupId>org.geoserver.web</groupId>
<artifactId>gs-web-core</artifactId>
<version>${gs.version}</version>
</dependency>
<properties>
<gs.version>2.5-SNAPSHOT</gs.version>
<gt.version>11-SNAPSHOT</gt.version>
<gwc.version>1.5.0</gwc.version>
<spring.version>3.1.4.RELEASE</spring.version>
<spring.security.version>3.1.0.RELEASE</spring.security.version>
<poi.version>3.8</poi.version>
<wicket.version>1.4.12</wicket.version>
<ant.version>1.8.4</ant.version>
<java.awt.headless>true</java.awt.headless>
<jvm.opts></jvm.opts>
<jalopy.phase>disabled</jalopy.phase>
<jalopy.srcExcludesPattern>disabled</jalopy.srcExcludesPattern>
<test.maxHeapSize>512M</test.maxHeapSize>
<test.maxPermSize>128M</test.maxPermSize>
<test.excludedGroups></test.excludedGroups>
<test.exclude.pattern>none</test.exclude.pattern>
<quietTests>true</quietTests>
<remoteOwsTests>false</remoteOwsTests>
<maven.build.timestamp.format>dd-MMM-yyyy HH:mm</maven.build.timestamp.format>
<build.timestamp>${maven.build.timestamp}</build.timestamp>
<build.hudsonId>-1</build.hudsonId>
<fork.javac>true</fork.javac>
<javac.maxHeapSize>256m</javac.maxHeapSize>
<image.tests>true</image.tests>
<interactive.tests>false</interactive.tests>
</properties>
当然,上面有一部分废话,懂maven结构的groupid什么的,根据你的parent的pom实际情况改子模块pom就行了。
我的子模块或者叫扩展模块的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.geoserver</groupId>
<artifactId>web</artifactId>
<version>2.5-SNAPSHOT</version>
</parent>
<groupId>org.geoserver</groupId>
<artifactId>hello_web</artifactId>
<version>1.0-SNAPSHOT</version>
<name>hello_web</name>
<description>hello_web</description>
<dependencies>
<dependency>
<groupId>org.geoserver.web</groupId>
<artifactId>web-core</artifactId>
<version>2.5-SNAPSHOT</version>
</dependency>
</dependencies>
<!-- <build> -->
<!-- <plugins> -->
<!-- <plugin> -->
<!-- <artifactId>maven-compiler-plugin</artifactId> -->
<!-- <configuration> -->
<!-- <source>1.5</source> -->
<!-- <target>1.5</target> -->
<!-- </configuration> -->
<!-- </plugin> -->
<!-- </plugins> -->
<!-- </build> -->
</project>
测试及其他的我都注释或者删掉了。因为maven的测试还没怎么搞明白,打包的时候总是失败。
建一个maven的web项目,搞一个spring配置文件:applicationContext.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="helloPage" class="org.geoserver.web.MenuPageInfo">
<property name="id" value="helloPage"/>
<property name="titleKey" value="HelloPage.page.title"/>
<property name="descriptionKey" value="HelloPage.page.description"/>
<property name="componentClass" value="org.geoserver.helloweb.HelloPage"/>
</bean>
</beans>
一个GeoServerApplication.properties,与applicationContext.xml同在,
HelloPage.page.title=Hello
HelloPage.page.description=A page to say hello
HelloPage.title=Hello Page Title
HelloPage.description=This is the description of the page
一个类:
org.geoserver.helloweb.HelloPage.java,applicationContext.xml中
<property name="componentClass" value="org.geoserver.helloweb.HelloPage"/>
对应的包名、类名,此处随意。
最后UI的html:HelloPage.html
可以跟你的HelloPage.java放一个目录,也可以放WebContent(反正你web工程根目录)下:
<html xmlns:wicket="http://wicket.apache.org">
<body>
<wicket:extend>
<div wicket:id="hellolabel"></div>
</wicket:extend>
</body>
</html>
注意有了这个
html xmlns:wicket="http://wicket.apache.org"
就可以使用wicket的标签了。
此时,即完成了。该web界面如果需要更多功能,则自己参照源码扩展吧。或者写自己的特定服务。
然后就是maven打包,我的pom是生成jar。
因为GeoServer所有的子模块以jar包的形式,也可以理解为插件的方式,懂的话,就可以根据需要进行自定义组装需要和不需要的功能了。打包方式是因为我的pom的依赖项:
<dependencies>
<dependency>
<groupId>org.geoserver.web</groupId>
<artifactId>web-core</artifactId>
<version>2.5-SNAPSHOT</version>
</dependency>
</dependencies>
对应着:D:\workspace\geoserver\src\web\core源码中:web包里的core包的pom,web\core中的pom段:
<groupId>org.geoserver.web</groupId>
<artifactId>gs-web-core</artifactId>
<packaging>jar</packaging>
<version>2.5-SNAPSHOT</version>
<name>Core UI Module</name>
指明了packaging的类型。
so,此时,打开cmd命令行窗口,当然如果你是linux开发的话,就不需说,你比我懂。进入我建的子模块工程目录,我的是:D:\workspace\gs-hello_web
我没跟他自身的子模块放一起,只是把他的根pom考出来了放workspace下而已,有弊端是他回去更新依赖项,只要能找到依赖pom项即可。
我跳过了maven的测试test功能,命令:mvn clean install -Dmaven.test.skip=true
然后到哪去找生成的jar就不说了。复制到你安装的GeoServer或者把他的webapps下的项目考到自己的tomcat(我是这个干的,他用的web容器我不熟悉。)下的工程的lib里。重启就可以了。最终效果是:
thanks。有错误请指正。大概是可以的。我主要是在maven方面的命令,以及xml配置卡住了,弄俩个项目就基本的会用了。
转载自:https://mtr-1.oss-cn-beijing.aliyuncs.com/qyblog/2019/04/20120751.jpg