見出し画像

IntelliJ IDEAでPlay Frameworkを導入する

※本稿は、windows +Intelli J Idea+Java版 Playframeworkでの環境設定となります。
Scalaであったり、Macであったりと、あまりこの組み合わせで発信しているブログはなかったので、自身の備忘録も兼ねて、残しています。
■本稿の概要
Intelli J IdeaでPlayframeworkを使うには・・・

1.Java8を入れる
2.プロジェクトを作りたいフォルダでcmdを起動する
3.sbt new playframework/play-java-seed.g8を入力する
4.sbt runを入力する
5.http://localhost:9000/へアクセスする

前提

・Windows 10 64bit版
・エディター:Intelli J Idea


手順1:JDKをインストールする

https://www.oracle.com/java/technologies/javase-jdk16-downloads.html

画像1

「jdk-16_windows-x64_bin.exe」をダウンロード&起動し、下記図のようにインストールを続けます。

画像2


手順2:Javaの環境変数を設定する

参考:Play Framework 2.0 + IntelliJの開発環境構築(Windows)

下記図のように設定する

画像7

JAVA_HOMEの設定。インストールしたフォルダを指定する。
①「C:\Program Files\Java\jdk-16」

画像5

②「C:\Program Files\Java\jdk-16\bin」

画像6

③インストール完了確認

java -version
javac -version

画像8



手順3:Intelli Jをダウンロードする

画像3

「Windows(.exe)」版を選択&ダウンロード&インストールします。

画像4

※インストール時のオプション設定については下記参照。
【開発環境】ローカル環境への統合開発環境(IDE): IntelliJ IDEAのインストール手順


手順4:Scalaインストール

※2021/04/20現在、「https://www.scala-lang.org/download/」を開くと下記のような画面になります。

画像9

私はIntelli Jを使うので左側を選択したところ、Intelli Jのホームページに飛びました。下記のように現在では、Intelli JのプラグインからScalaを入れる方式のようです。

参考:Scala 学習前の環境構築 [Windows×IntelliJ×Scala]

画像10

無事にScalaでコンパイル&実行確認できました。

画像11



手順5:PlayFrameworkをインストール

http://www.playframework.com/


エラー解決:
このようなエラーになった場合は、海外サイト「java-Scala中的「安全でないHTTPリクエストはサポートされていません」错误」の通り、≪.sbt≫フォルダを削除します。

C:\playframework>sbt new playframework/play-java-seed.g8
[info] welcome to sbt 1.5.1 (Oracle Corporation Java 16.0.1)
[info] loading global plugins from C:\Users\Administrator\.sbt\1.0\plugins
[error] insecure HTTP request is unsupported 'http://repo.typesafe.com/typesafe/releases'; switch to HTTPS or opt-in as ("typesafe-releases" at "http://repo.typesafe.com/typesafe/releases").withAllowInsecureProtocol(true), or by using allowInsecureProtocol in repositories file
[error] insecure HTTP request is unsupported 'http://repo.typesafe.com/typesafe/releases'; switch to HTTPS or opt-in as ("typesafe-releases" at "http://repo.typesafe.com/typesafe/releases").withAllowInsecureProtocol(true), or by using allowInsecureProtocol in repositories file
[error] insecure HTTP request is unsupported 'http://repo.typesafe.com/typesafe/releases'; switch to HTTPS or opt-in as ("typesafe-releases" at "http://repo.typesafe.com/typesafe/releases").withAllowInsecureProtocol(true), or by using allowInsecureProtocol in repositories file
[error] java.lang.RuntimeException: insecure protocol is unsupported
[error]         at scala.sys.package$.error(package.scala:30)
[error]         at sbt.Classpaths$.errorInsecureProtocol(Defaults.scala:3301)
[error]         at sbt.Classpaths$.$anonfun$mkIvyConfiguration$1(Defaults.scala:3895)
[error]         at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error]         at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error]         at sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error]

私の環境では、

[info] loading global plugins from C:\Users\Administrator\.sbt\1.0\plugins

となっていたので、リネームしました。

画像12

すると何と言うことでしょう。エラーなく、プロジェクト名を入力できるようになりました!

画像13

そのままEnterキーを押すと、プロジェクトが作成されます。

画像14


手順6:PlayFrameworkを起動する

起動するためのコマンドは

sbt run

です。

C:\playframework\play-java-seed>sbt run
[info] welcome to sbt 1.5.2 (Oracle Corporation Java 16.0.1)
[info] loading settings for project play-java-seed-build from plugins.sbt ...
[info] loading project definition from C:\playframework\play-java-seed\project
[info] loading settings for project root from build.sbt ...
[info] set current project to play-java-seed (in build file:/C:/playframework/play-java-seed/)

--- (Running the application, auto-reloading is enabled) ---

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /[0:0:0:0:0:0:0:0]:9000

(Server started, use Enter to stop and go back to the console...)

2021-07-07 22:43:32 ERROR p.api.http.DefaultHttpErrorHandler

! @7kacheb9c - Internal server error, for (GET) [/] ->

play.api.UnexpectedException: Unexpected exception[UncheckedExecutionException: java.lang.IllegalStateException: Unable to load cache item]
       at play.core.server.DevServerStart$$anon$1.reload(DevServerStart.scala:254)
       at play.core.server.DevServerStart$$anon$1.get(DevServerStart.scala:148)
       at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:302)
       at play.core.server.AkkaHttpServer.$anonfun$createServerBinding$1(AkkaHttpServer.scala:224)
       at akka.stream.impl.fusing.MapAsync$$anon$30.onPush(Ops.scala:1297)
       at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:541)
       at akka.stream.impl.fusing.GraphInterpreter.processEvent(GraphInterpreter.scala:495)
       at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:390)
       at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:625)
       at akka.stream.impl.fusing.GraphInterpreterShell$AsyncInput.execute(ActorGraphInterpreter.scala:502)
       at akka.stream.impl.fusing.GraphInterpreterShell.processEvent(ActorGraphInterpreter.scala:600)
       at akka.stream.impl.fusing.ActorGraphInterpreter.akka$stream$impl$fusing$ActorGraphInterpreter$$processEvent(ActorGraphInterpreter.scala:775)
       at akka.stream.impl.fusing.ActorGraphInterpreter$$anonfun$receive$1.applyOrElse(ActorGraphInterpreter.scala:790
       at akka.actor.Actor.aroundReceive(Actor.scala:537)
       at akka.actor.Actor.aroundReceive$(Actor.scala:535)
       at akka.stream.impl.fusing.ActorGraphInterpreter.aroundReceive(ActorGraphInterpreter.scala:691)
       at akka.actor.ActorCell.receiveMessage(ActorCell.scala:579)
       at akka.actor.ActorCell.invoke(ActorCell.scala:547)
       at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:270)
       at akka.dispatch.Mailbox.run(Mailbox.scala:231)
       at akka.dispatch.Mailbox.exec(Mailbox.scala:243)
       at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:295)
       at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1016)
       at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1665)
       at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1598)
       at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Caused by: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Unable to load cache item
       at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2051)
       at com.google.common.cache.LocalCache.get(LocalCache.java:3951)
       at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974)
       at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4958)
       at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4964)
       at com.google.inject.internal.FailableCache.get(FailableCache.java:54)
       at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:49)
       at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:155)
       at com.google.inject.internal.InjectorImpl.initializeBinding(InjectorImpl.java:592)
       at com.google.inject.internal.AbstractBindingProcessor$Processor.initializeBinding(AbstractBindingProcessor.java:173)
       at com.google.inject.internal.AbstractBindingProcessor$Processor.lambda$scheduleInitialization$0(AbstractBindingProcessor.java:160)
       at com.google.inject.internal.ProcessedBindingData.initializeBindings(ProcessedBindingData.java:49)
       at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:124)
       at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:108)
       at com.google.inject.Guice.createInjector(Guice.java:87)
       at com.google.inject.Guice.createInjector(Guice.java:78)
       at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:200)
       at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:155)
       at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
       at play.core.server.DevServerStart$$anon$1.$anonfun$reload$2(DevServerStart.scala:193)
       at play.utils.Threads$.withContextClassLoader(Threads.scala:22)
       at play.core.server.DevServerStart$$anon$1.reload(DevServerStart.scala:185)
       ... 25 common frames omitted
Caused by: java.lang.IllegalStateException: Unable to load cache item
       at com.google.inject.internal.cglib.core.internal.$LoadingCache.createEntry(LoadingCache.java:79)
       at com.google.inject.internal.cglib.core.internal.$LoadingCache.get(LoadingCache.java:34)
       at com.google.inject.internal.cglib.core.$AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:119)
       at com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:294)
       at com.google.inject.internal.cglib.reflect.$FastClass$Generator.create(FastClass.java:65)
       at com.google.inject.internal.BytecodeGen.newFastClassForMember(BytecodeGen.java:258)
       at com.google.inject.internal.BytecodeGen.newFastClassForMember(BytecodeGen.java:207)
       at com.google.inject.internal.DefaultConstructionProxyFactory.create(DefaultConstructionProxyFactory.java:49)
       at com.google.inject.internal.ProxyFactory.create(ProxyFactory.java:156)
       at com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:94)
       at com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:30)
       at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:38)
       at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:34)
       at com.google.inject.internal.FailableCache$1.load(FailableCache.java:43)
       at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
       at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
       at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
       at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
       ... 46 common frames omitted
Caused by: java.lang.ExceptionInInitializerError: null
       at com.google.inject.internal.cglib.core.$DuplicatesPredicate.evaluate(DuplicatesPredicate.java:104)
       at com.google.inject.internal.cglib.core.$CollectionUtils.filter(CollectionUtils.java:52)
       at com.google.inject.internal.cglib.reflect.$FastClassEmitter.<init>(FastClassEmitter.java:69)
       at com.google.inject.internal.cglib.reflect.$FastClass$Generator.generateClass(FastClass.java:77)
       at com.google.inject.internal.cglib.core.$DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
       at com.google.inject.internal.cglib.core.$AbstractClassGenerator.generate(AbstractClassGenerator.java:332)
       at com.google.inject.internal.cglib.core.$AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:96)
       at com.google.inject.internal.cglib.core.$AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:94)
       at com.google.inject.internal.cglib.core.internal.$LoadingCache$2.call(LoadingCache.java:54)
       at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
       at com.google.inject.internal.cglib.core.internal.$LoadingCache.createEntry(LoadingCache.java:61)
       ... 63 common frames omitted
Caused by: com.google.inject.internal.cglib.core.$CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @42359ebd
       at com.google.inject.internal.cglib.core.$ReflectUtils.defineClass(ReflectUtils.java:464)
       at com.google.inject.internal.cglib.core.$AbstractClassGenerator.generate(AbstractClassGenerator.java:339)
       at com.google.inject.internal.cglib.core.$AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:96)
       at com.google.inject.internal.cglib.core.$AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:94)
       at com.google.inject.internal.cglib.core.internal.$LoadingCache$2.call(LoadingCache.java:54)
       at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
       at com.google.inject.internal.cglib.core.internal.$LoadingCache.createEntry(LoadingCache.java:61)
       at com.google.inject.internal.cglib.core.internal.$LoadingCache.get(LoadingCache.java:34)
       at com.google.inject.internal.cglib.core.$AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:119)
       at com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:294)
       at com.google.inject.internal.cglib.core.$KeyFactory$Generator.create(KeyFactory.java:221)
       at com.google.inject.internal.cglib.core.$KeyFactory.create(KeyFactory.java:174)
       at com.google.inject.internal.cglib.core.$KeyFactory.create(KeyFactory.java:157)
       at com.google.inject.internal.cglib.core.$KeyFactory.create(KeyFactory.java:149)
       at com.google.inject.internal.cglib.core.$KeyFactory.create(KeyFactory.java:145)
       at com.google.inject.internal.cglib.core.$MethodWrapper.<clinit>(MethodWrapper.java:23)
       ... 74 common frames omitted
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @42359ebd
       at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
       at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
       at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
       at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
       at com.google.inject.internal.cglib.core.$ReflectUtils$1.run(ReflectUtils.java:61)
       at java.base/java.security.AccessController.doPrivileged(AccessController.java:554)
       at com.google.inject.internal.cglib.core.$ReflectUtils.<clinit>(ReflectUtils.java:52)
       at com.google.inject.internal.cglib.reflect.$FastClassEmitter.<init>(FastClassEmitter.java:67)
       ... 71 common frames omitted

起動したときにこのようなエラーがある場合は、javaのバージョンが8以外を使っていることに起因している可能性があります。

参考:
1.プロジェクト「Mavenの実行エラー」をコンパイルしようとすると、Mavenがクラッシュします。

2.Windows版Javaのダウンロード
推奨 Version 8 Update 291 (ファイルサイズ: 1.98 MB)
リリース日 2021年4月20日

「1」に書かれた内容から、java8なら互換性があるようです。最新のjava16を入れても、まだPlayframework側が未対応のようですね。

そのため、エラーが出ているようです。

「windows 」>「プログラムのアンインストール」>「Java16」をアンインストールします。

次に、「2」のリンクからjava8をインストールします。

画像15

2021年7月7日現在、このバージョンとなりました。


その後、改めて「sbt run」をすると。。。

C:\playframework\play-java-seed>sbt run
[info] welcome to sbt 1.5.2 (Oracle Corporation Java 1.8.0_112)
[info] loading settings for project play-java-seed-build from plugins.sbt ...
[info] loading project definition from C:\playframework\play-java-seed\project
[info] loading settings for project root from build.sbt ...
[info] set current project to play-java-seed (in build file:/C:/playframework/play-java-seed/)

--- (Running the application, auto-reloading is enabled) ---

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Enter to stop and go back to the console...)

[info] compiling 6 Scala sources and 2 Java sources to C:\playframework\play-java-seed\target\scala-2.13\classes ...
[info] Non-compiled module 'compiler-bridge_2.13' for Scala 2.13.6. Compiling...
[info]   Compilation completed in 6.286s.
2021-07-07 23:35:49 INFO  play.api.http.EnabledFilters  Enabled Filters (see <https://www.playframework.com/documentation/latest/Filters>):

   play.filters.csrf.CSRFFilter
   play.filters.headers.SecurityHeadersFilter
   play.filters.hosts.AllowedHostsFilter

2021-07-07 23:35:49 INFO  play.api.Play  Application started (Dev) (no global state)


画像16

やりました!ついにPlayframeworkを起動することができました。



参考にしたサイト

IntelliJ IDEAでPlay Frameworkを使ってみる
【Play Framework入門】特徴と使い方を徹底解説!Spring Bootとの違いは?インストールの手順も紹介


この記事が気に入ったらサポートをしてみませんか?