@@ -1077,11 +1077,164 @@ bootRepackage {
1077
1077
classifier = 'exec'
1078
1078
}
1079
1079
```
1080
-
1081
1080
* 在可执行jar运行时提取特定的版本
1081
+
1082
+ 在一个可执行jar中,为了运行,多数内嵌的库不需要拆包(unpacked),然而有一些库可能会遇到问题。例如,JRuby包含它自己的内嵌jar,它假定` jruby-complete.jar ` 本身总是能够直接作为文件访问的。
1083
+
1084
+ 为了处理任何有问题的库,你可以标记那些特定的内嵌jars,让它们在可执行jar第一次运行时自动解压到一个临时文件夹中。例如,为了将JRuby标记为使用Maven插件拆包,你需要添加如下的配置:
1085
+ ``` xml
1086
+ <build >
1087
+ <plugins >
1088
+ <plugin >
1089
+ <groupId >org.springframework.boot</groupId >
1090
+ <artifactId >spring-boot-maven-plugin</artifactId >
1091
+ <configuration >
1092
+ <requiresUnpack >
1093
+ <dependency >
1094
+ <groupId >org.jruby</groupId >
1095
+ <artifactId >jruby-complete</artifactId >
1096
+ </dependency >
1097
+ </requiresUnpack >
1098
+ </configuration >
1099
+ </plugin >
1100
+ </plugins >
1101
+ </build >
1102
+ ```
1103
+ 使用Gradle完全上述操作:
1104
+ ``` gradle
1105
+ springBoot {
1106
+ requiresUnpack = ['org.jruby:jruby-complete']
1107
+ }
1108
+ ```
1082
1109
* 使用排除创建不可执行的JAR
1110
+
1111
+ 如果你构建的产物既有可执行的jar和非可执行的jar,那你常常需要为可执行的版本添加额外的配置文件,而这些文件在一个library jar中是不需要的。比如,application.yml配置文件可能需要从非可执行的JAR中排除。
1112
+
1113
+ 下面是如何在Maven中实现:
1114
+ ``` xml
1115
+ <build >
1116
+ <plugins >
1117
+ <plugin >
1118
+ <groupId >org.springframework.boot</groupId >
1119
+ <artifactId >spring-boot-maven-plugin</artifactId >
1120
+ <configuration >
1121
+ <classifier >exec</classifier >
1122
+ </configuration >
1123
+ </plugin >
1124
+ <plugin >
1125
+ <artifactId >maven-jar-plugin</artifactId >
1126
+ <executions >
1127
+ <execution >
1128
+ <id >exec</id >
1129
+ <phase >package</phase >
1130
+ <goals >
1131
+ <goal >jar</goal >
1132
+ </goals >
1133
+ <configuration >
1134
+ <classifier >exec</classifier >
1135
+ </configuration >
1136
+ </execution >
1137
+ <execution >
1138
+ <phase >package</phase >
1139
+ <goals >
1140
+ <goal >jar</goal >
1141
+ </goals >
1142
+ <configuration >
1143
+ <!-- Need this to ensure application.yml is excluded -->
1144
+ <forceCreation >true</forceCreation >
1145
+ <excludes >
1146
+ <exclude >application.yml</exclude >
1147
+ </excludes >
1148
+ </configuration >
1149
+ </execution >
1150
+ </executions >
1151
+ </plugin >
1152
+ </plugins >
1153
+ </build >
1154
+ ```
1155
+ 在Gradle中,你可以使用标准任务的DSL(领域特定语言)特性创建一个新的JAR存档,然后在bootRepackage任务中使用withJarTask属性添加对它的依赖:
1156
+ ``` gradle
1157
+ jar {
1158
+ baseName = 'spring-boot-sample-profile'
1159
+ version = '0.0.0'
1160
+ excludes = ['**/application.yml']
1161
+ }
1162
+
1163
+ task('execJar', type:Jar, dependsOn: 'jar') {
1164
+ baseName = 'spring-boot-sample-profile'
1165
+ version = '0.0.0'
1166
+ classifier = 'exec'
1167
+ from sourceSets.main.output
1168
+ }
1169
+
1170
+ bootRepackage {
1171
+ withJarTask = tasks['execJar']
1172
+ }
1173
+ ```
1083
1174
* 远程调试一个使用Maven启动的Spring Boot项目
1175
+
1176
+ 想要为使用Maven启动的Spring Boot应用添加一个远程调试器,你可以使用[ mave插件] ( http://docs.spring.io/spring-boot/docs/1.3.0.BUILD-SNAPSHOT/maven-plugin/ ) 的jvmArguments属性。详情参考[ 示例] ( http://docs.spring.io/spring-boot/docs/1.3.0.BUILD-SNAPSHOT/maven-plugin/examples/run-debug.html ) 。
1177
+
1084
1178
* 远程调试一个使用Gradle启动的Spring Boot项目
1179
+
1180
+ 想要为使用Gradle启动的Spring Boot应用添加一个远程调试器,你可以使用build.gradle的applicationDefaultJvmArgs属性或` --debug-jvm ` 命令行选项。
1181
+
1182
+ build.gradle:
1183
+ ``` gradle
1184
+ applicationDefaultJvmArgs = [
1185
+ "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
1186
+ ]
1187
+ ```
1188
+ 命令行:
1189
+ ``` shell
1190
+ $ gradle run --debug-jvm
1191
+ ```
1192
+ 详情查看[ Gradle应用插件] ( http://www.gradle.org/docs/current/userguide/application_plugin.html ) 。
1193
+
1085
1194
* 使用Ant构建可执行存档(archive)
1195
+
1196
+ 想要使用Ant进行构建,你需要抓取依赖,编译,然后像通常那样创建一个jar或war存档。为了让它可以执行:
1197
+
1198
+ 1 . 使用合适的启动器配置` Main-Class ` ,比如对于jar文件使用JarLauncher,然后将其他需要的属性以manifest实体指定,主要是一个` Start-Class ` 。
1199
+ 2 . 将运行时依赖添加到一个内嵌的'lib'目录(对于jar),` provided ` (内嵌容器)依赖添加到一个内嵌的` lib-provided ` 目录。记住*** 不要*** 压缩存档中的实体。
1200
+ 3 . 在存档的根目录添加` spring-boot-loader ` 类(这样` Main-Class ` 就可用了)。
1201
+
1202
+ 示例:
1203
+ ``` xml
1204
+ <target name =" build" depends =" compile" >
1205
+ <copy todir =" target/classes/lib" >
1206
+ <fileset dir =" lib/runtime" />
1207
+ </copy >
1208
+ <jar destfile =" target/spring-boot-sample-actuator-${spring-boot.version}.jar" compress =" false" >
1209
+ <fileset dir =" target/classes" />
1210
+ <fileset dir =" src/main/resources" />
1211
+ <zipfileset src =" lib/loader/spring-boot-loader-jar-${spring-boot.version}.jar" />
1212
+ <manifest >
1213
+ <attribute name =" Main-Class" value =" org.springframework.boot.loader.JarLauncher" />
1214
+ <attribute name =" Start-Class" value =" ${start-class}" />
1215
+ </manifest >
1216
+ </jar >
1217
+ </target >
1218
+ ```
1219
+ 该Actuator示例中有一个build.xml文件,可以使用以下命令来运行:
1220
+ ``` shell
1221
+ $ ant -lib < path_to> /ivy-2.2.jar
1222
+ ```
1223
+ 在上述操作之后,你可以使用以下命令运行该应用:
1224
+ ``` shell
1225
+ $ java -jar target/* .jar
1226
+ ```
1086
1227
* 如何使用Java6
1087
1228
1229
+ 如果想在Java6环境中使用Spring Boot,你需要改变一些配置。具体的变化取决于你应用的功能。
1230
+
1231
+ - 内嵌Servlet容器兼容性
1232
+
1233
+ 如果你在使用Boot的内嵌Servlet容器,你需要使用一个兼容Java6的容器。Tomcat 7和Jetty 8都是Java 6兼容的。具体参考[ Section 63.15, “Use Tomcat 7”] ( http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-use-tomcat-7 ) 和[ Section 63.16, “Use Jetty 8”] ( http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-use-jetty-8 ) 。
1234
+
1235
+ - JTA API兼容性
1236
+
1237
+ Java事务API自身并不要求Java 7,而是官方的API jar包含的已构建类要求Java 7。如果你正在使用JTA,那么你需要使用能够在Java 6工作的构建版本替换官方的JTA 1.2 API jar。为了完成该操作,你需要排除任何对` javax.transaction:javax.transaction-api ` 的传递依赖,并使用` org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final ` 依赖替换它们。
1238
+
1239
+
1240
+ ### 传统部署
0 commit comments