文章14 | 阅读 6809 | 点赞0
Dubbo服务容器是一个 standalone 的启动程序,因为后台服务不需要 Tomcat 或 JBoss 等 Web 容器的功能,如果硬要用 Web 容器去加载服务提供方,增加复杂性,也浪费资源。建议使用 Dubbo框架本身提供的(com.alibaba.dubbo.container.Main)Main方法类来运行(Spring容器),优点是可实现优雅关机(ShutdownHook)
项目提供者结构如下:simple-provider.xml是我的服务提供者的配置文件。
打包关键的maven的pom.xml配置如下:
<!--省略了上面的依赖配置-->
<!--打包部署-->
<build>
<!--打包名称-->
<finalName>server-pak</finalName>
<resources>
<resource>
<targetPath>${project.build.directory}/classes</targetPath>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<!-- 结合com.alibaba.dubbo.container.Main -->
<resource>
<targetPath>${project.build.directory}/classes/META-INF/spring</targetPath>
<!-- 将我们的dubbo配置文件(src/main/resources/simple-provider.xml)copy到META-INF/spring下,因为dubbo默认读取该位置下的配置文件 -->
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>simple-provider.xml</include>
</includes>
</resource>
</resources>
<pluginManagement>
<plugins>
<!-- 解决Maven插件在Eclipse内执行了一系列的生命周期引起冲突 -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<versionRange>[2.0,)</versionRange>
<goals>
<goal>copy-dependencies</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<manifest>
<!--启动方法要写全路径-->
<!-- <mainClass>com.wkp.service.simple.provider.Provider</mainClass> -->
<mainClass>com.alibaba.dubbo.container.Main</mainClass>
<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!--MAVEN打包duboo可执行jar end -->
</project>
最关键的配置就是下面这段
<!-- 结合com.alibaba.dubbo.container.Main -->
<resource>
<targetPath>${project.build.directory}/classes/META-INF/spring</targetPath>
<!-- 将我们的dubbo配置文件(src/main/resources/simple-provider.xml)copy到META-INF/spring下,因为dubbo默认读取该位置下的配置文件 -->
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>simple-provider.xml</include>
</includes>
</resource>
然后我们进行maven的install,package之后,可以在target目录下看到如下内容:其中lib目录为依赖的jar包,server-pak.jar为服务的可执行jar包,部署的时候要把两者放到同一个目录下。
然后我们将二者上传到Linux服务器上,注意放到同一个目录,然后执行 java -jar server-pak.jar即可启动我们的Dubbo服务
好了,至此Dubbo服务打可执行jar包就完成了。另外,关于Dubbo的系列博客暂时先告一段落了,希望继续关注,谢谢!
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/u012988901/article/details/86730814
内容来源于网络,如有侵权,请联系作者删除!