Skip to content

Commit 1026185

Browse files
committed
Update How-to_ guides.md
1 parent 3d540ee commit 1026185

File tree

1 file changed

+154
-1
lines changed

1 file changed

+154
-1
lines changed

How-to_ guides.md

Lines changed: 154 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1077,11 +1077,164 @@ bootRepackage {
10771077
classifier = 'exec'
10781078
}
10791079
```
1080-
10811080
* 在可执行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+
```
10821109
* 使用排除创建不可执行的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+
```
10831174
* 远程调试一个使用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+
10841178
* 远程调试一个使用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+
10851194
* 使用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+
```
10861227
* 如何使用Java6
10871228

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

Comments
 (0)