目录
前言
本文介绍如何在本地环境编译、运行AppRunner。
环境准备
Java 1.8+
D:\>java -version
java version "11.0.9" 2020-10-20 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.9+7-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.9+7-LTS, mixed mode)
git
D:\>git version
git version 2.27.0.windows.1
maven
D:\>mvn -v
D:\
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\sandbox\apache-maven-3.6.3\bin\..
Java version: 11.0.9, vendor: Oracle Corporation, runtime: D:\sandbox\Java\jdk-11.0.9
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
设置M2_HOME环境变量
D:\>echo %M2_HOME%
D:\sandbox\apache-maven-3.6.3
网络:由于国内上github不稳定,建议自备科学上网
下载源代码
代码已开源 https://github.com/danielflower/app-runner
git clone https://github.com/danielflower/app-runner.git
编译和运行
1. 用IntelliJ(或其他IDE)打开工程
2. 进行mvn clean install,所有unit test都应该通过且maven build成功
3. 运行RunLocal里的main方法
4. 看到如下日志表示运行成功
00:23:43,935 [main] INFO Config - Using config file: D:\sandbox\code\app-runner\sample-config.properties
00:23:44,009 [main] INFO App - SystemInfo{hostName='LAPTOP-ODF35RAF', user='bin9w', pid=14992, publicKeys=[], osName='Windows 10', numCpus=8}
00:23:44,016 [main] INFO App - Deleting contents of temporary folder at D:\sandbox\code\app-runner\target\local\temp
00:23:44,022 [main] INFO App - File deletion complete in 7ms
00:23:44,024 [main] INFO App - Detecting providers...
00:23:45,260 [main] INFO App - Registered providers...
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) - Maven home: D:\sandbox\apache-maven-3.6.3\bin\.. - Java version: 11.0.9, vendor: Oracle Corporation, runtime: D:\sandbox\Java\jdk-11.0.9 - Default locale: zh_CN, platform encoding: GBK - OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
Node v12.18.3 with NPM 6.14.6
00:23:45,262 [main] INFO AppEstate - Loading app [app-runner-home] (git:https://github.com/danielflower/app-runner-home.git)
00:23:45,515 [main] INFO AppManager - Clone app app-runner-home from https://github.com/danielflower/app-runner-home.git to D:\sandbox\code\app-runner\target\local\repos\app-runner-home
00:24:25,602 [main] INFO AppManager - Created app manager for app-runner-home in dir D:\sandbox\code\app-runner\target\local\apps\app-runner-home\data
00:24:26,274 [main] INFO WebServer - Started web server at null / http://localhost:8080
00:24:27,098 [pool-5-thread-1] INFO AppManager - getting the contributors [dependabot[bot], Daniel Flower, Stephen Benson, Rajesh Shah, Rika]
00:24:27,125 [pool-5-thread-1] INFO AppManager - Using maven for app-runner-home
00:24:27,128 [pool-5-thread-1] INFO MavenRunner - Building maven project at D:\sandbox\code\app-runner\target\local\temp\app-runner-home\instances\1636993467099
00:24:34,122 [pool-5-thread-1] INFO MavenRunner - Build successful. Going to start app.
00:24:34,139 [pool-5-thread-1] INFO ProcessStarter - Starting D:\sandbox\code\app-runner\target\local\temp\app-runner-home\instances\1636993467099> D:\sandbox\Java\jdk-11.0.9\bin\java.exe -Djava.io.tmpdir=D:\sandbox\code\app-runner\target\local\temp\app-runner-home -jar target\app-runner-home-1.0-SNAPSHOT.jar
00:24:35,309 [pool-5-thread-1] INFO ProcessStarter - Completed D:\sandbox\Java\jdk-11.0.9\bin\java.exe in 1170ms
00:24:35,320 [pool-5-thread-1] INFO ProxyMap - app-runner-home maps to http://localhost:50019/app-runner-home
这时在浏览器打开http://localhost:8080/app-runner-home/就可以看到AppRunner主页了,证明本地运行成功。
5. 我曾经看到过如下错误日志,是连接github不稳定导致的,重跑几次解决了。
00:19:35,774 [main] INFO AppEstate - Loading app [app-runner-home] (git:https://github.com/danielflower/app-runner-home.git)
00:19:36,019 [main] INFO AppManager - Clone app app-runner-home from https://github.com/danielflower/app-runner-home.git to D:\sandbox\code\app-runner\target\local\repos\app-runner-home
00:20:16,222 [main] WARN App - Error while trying to initiliase app-runner-home (https://github.com/danielflower/app-runner-home.git) - will ignore this app.
org.eclipse.jgit.api.errors.TransportException: https://github.com/danielflower/app-runner-home.git: cannot open git-upload-pack
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:222)
at org.eclipse.jgit.api.CloneCommand.fetch(CloneCommand.java:302)
at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:178)
at com.danielflower.apprunner.mgmt.AppManager.create(AppManager.java:71)
at com.danielflower.apprunner.AppEstate.addApp(AppEstate.java:63)
at com.danielflower.apprunner.App.start(App.java:72)
at com.danielflower.apprunner.App.main(App.java:214)
at com.danielflower.apprunner.RunLocal.main(RunLocal.java:10)
Caused by: org.eclipse.jgit.errors.TransportException: https://github.com/danielflower/app-runner-home.git: cannot open git-upload-pack
at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:605)
at org.eclipse.jgit.transport.TransportHttp.openFetch(TransportHttp.java:362)
at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:105)
at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:91)
at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1260)
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:211)
... 7 common frames omitted
Caused by: javax.net.ssl.SSLException: Connection reset
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:127)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:353)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:296)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:291)
at java.base/sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1522)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:965)
at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:252)
at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:292)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:351)
at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:746)
at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689)
at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:717)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1615)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1520)
at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:334)
at org.eclipse.jgit.transport.http.JDKHttpConnection.getResponseCode(JDKHttpConnection.java:85)
at org.eclipse.jgit.util.HttpSupport.response(HttpSupport.java:208)
at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:510)
... 12 common frames omitted
Suppressed: java.net.SocketException: Connection reset by peer: socket write error
at java.base/java.net.SocketOutputStream.socketWrite0(Native Method)
at java.base/java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:110)
at java.base/java.net.SocketOutputStream.write(SocketOutputStream.java:150)
at java.base/sun.security.ssl.SSLSocketOutputRecord.encodeAlert(SSLSocketOutputRecord.java:83)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:384)
... 29 common frames omitted
Caused by: java.net.SocketException: Connection reset
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:186)
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:476)
at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:470)
at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70)
at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1308)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:949)
... 25 common frames omitted
00:20:17,062 [main] INFO WebServer - Started web server at null / http://localhost:8080