(14)Dubbo服务打可执行jar包

x33g5p2x  于2021-12-21 转载在 其他  
字(4.1k)|赞(0)|评价(0)|浏览(306)

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的系列博客暂时先告一段落了,希望继续关注,谢谢!

相关文章