20200426_Jetty開発環境をつくる2

https://gihyo.jp/dev/feature/01/websocket/0002
今度はマシンが貧弱なのでEclipse部分をVSCodeで対応したいと思った。Mavenは4/23記事で準備できてるはず....だったけどできないjava.home設定しても動かない

"java.home":"C:\\Program Files\\Java\\jdk1.8.0_161"

settings.jsonがこれでは通らない。以下は他にダメな例

"java.home":"\\wsl$\\Ubuntu-18.04\\usr\\lib\\jvm\\java-11-openjdk-amd64\\bin\\java"
"java.home":"/usr/lib/jvm/java-11-openjdk-amd64/bin/java"

ここで方針を見直してMavenを諦めてGradleでいくことに
https://www.task-notes.com/entry/java/20170612/1497196558
https://qiita.com/vvakame/items/83366fbfa47562fafbf4

Gradle使った方が安パイそうに見える
https://qiita.com/gitcho/items/a6c0bb781bc395e43ec4

ほんでgradle initしたあとからcode .でvscode作業に行ってみるが
問題はGradel構成のプロジェクトでJetty開発どうやんだっていう

https://blogenist.jp/2019/11/06/9687/
こうかな?いやあ..Mac手順だしjava.home設定が結局うまくいかんのよねえ、それを解決しなあかん

また方針少し直して、別にVSCodeにこだわる必要なかった素のgradleでやってればいいエディタとして使うだけならいいのかも、と妥協する https://qiita.com/megmogmog1965/items/681710def8bb6b6cd9e1

Gradleのリファレンスをチェックするも、どうしてもGradleの FAILURE: Build failed が解決できない...
http://gradle.monochromeroad.com/docs/userguide/userguide.html

> Plugin with id 'jetty' not found.

https://plugins.gradle.org/plugin/org.gretty
https://stackoverflow.com/questions/51979257/how-to-run-jetty-with-gradle
ここでjettyプラグインは使えないgrettyというプラグインであればいけそうということに気づき gradle wrapper までは通せるようになったが次が通らない

$ ./gradlew -version

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.7'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

wrapper作ったやつがバージョンちゃんとしてないとこうなるっぽいので、build.gradleを適当に書き換えてwrapperを生成しなおし https://github.com/gradle/gradle/issues/8671

task wrapper(type: Wrapper) {
    gradleVersion = '4.10'
}

たけど..やっぱりうまくいかない.... https://github.com/akhikhl/gretty grettyのcommitログみたら2017から更新止まってるなあって..

https://www.task-notes.com/entry/java/20170612/1497196558
最終的にシンプルにJetty起動だけできればいいという妥協したが、sudo /etc/init.d/jetty start がうまくいかないJetty起動しない

StartLog Establishing /opt/jetty/logs/start.log on Sun Apr 26 18:44:22 JST 2020
java.nio.file.NoSuchFileException: /opt/jetty/tmp/start_1428824937462728819.properties
        at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
        at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219)
        at java.base/java.nio.file.Files.newByteChannel(Files.java:370)
        at java.base/java.nio.file.Files.createFile(Files.java:647)
        at java.base/java.nio.file.TempFileHelper.create(TempFileHelper.java:137)
        at java.base/java.nio.file.TempFileHelper.createTempFile(TempFileHelper.java:160)
        at java.base/java.nio.file.Files.createTempFile(Files.java:912)
        at org.eclipse.jetty.start.StartArgs.getMainArgs(StartArgs.java:792)
        at org.eclipse.jetty.start.Main.invokeMain(Main.java:209)
        at org.eclipse.jetty.start.Main.start(Main.java:491)
        at org.eclipse.jetty.start.Main.main(Main.java:77)
java.nio.file.NoSuchFileException: /opt/jetty/tmp/start_1428824937462728819.properties
        at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)

もうアドリブで直した、見た感じたぶんbuildとかの時にtmpディレクトリ配下へのファイル生成で失敗して必要なファイルが足りなくなってるぽい。tmpディレクトリなかったのでjettyユーザでmkdirだけしてから再実行したらstartできるようになった

そのあとは普通に gradle build/wrapper して gradlew war 使ってデプロイしていけばなんとかhttpサーバ起動できた... 長かった.....

以下は最終的なbuild.gradleファイルの中身

group 'com.task_notes'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'war'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
}

task wrapper(type: Wrapper) {
    gradleVersion = '4.10'
}