一、為什么要構建Dubbo服務的可執行jar包?
1.1 Dubbo服務運行方式比較
✎使用Servlet容器運行(Tomcat、Jetty等) ---不可取
--缺點:增加復雜性(多了容器的端口)
浪費內存資源,Servlet運行要占用一定的內存
✎自建main()方法來運行Spring容器 ---不可取 (本地調試可用)
--缺點:Dubbo本身提供的高級特性沒用上
自己編寫啟動類可能會有缺陷
✎使用Dubbo框架提供main()方法來運行Spring容器 ---建議使用
--優點:框架本身提供(com.alibaba.dubbo.container.Main)
可實現優雅關機(ShutdownHook)
1.2 官方文檔查看
http://dubbo.io/books/dubbo-user-book/demos/service-container.html
“6.40 容器服務”部分
綜上所述所以要構建Dubbo服務的可執行jar包(說了句廢話,偷笑!!)
二、怎么構建?
2.1 看看工程目錄
這個就是我們要打包成Dubbo服務的工程
2.2 maven插件
<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>
<!--把resources/spring目錄下的文件打包的時候打到類路徑下METAINF/spring目錄下--> <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath> <directory>src/main/resources/spring</directory> <filtering>true</filtering> <includes> <include>spring-context.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.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> <useUniqueVersions>false</useUniqueVersions> <outputDirectory> ${project.build.directory}/lib </outputDirectory> </configuration> </execution> </executions> </plugin> </plugins>
2.3 maven 打包
mvn clean package
然后再項目的target目錄下就看到
打開edu-service-user.jar目錄看一下結構
2.4 運行jar包:
在jar文件的目錄下運行 java -jar edu-service-user.jar
2.4 注意點:
在import引入其他xml配置文件的地方要加 "classpath:"