scala - java.lang.RuntimeException:未检测到主类 - Docker
问题描述
在尝试对我的应用程序进行 dockerize 时,我遇到了一个非常奇怪的问题。这是一个简单的 Scala 应用程序,它写在 Kafka 主题上。更具体地说,我有 Dockerfile,我在下面安装 sbt 并将我的应用程序复制到容器中。任何建议都非常受欢迎!:) 你有 dockerized sbt app 的合适例子吗?
当我运行docker-compose up
我得到这个错误
collector_1 | [error] java.lang.RuntimeException: No main class detected.
collector_1 | [error] at scala.sys.package$.error(package.scala:26)
collector_1 | [error] (Compile / bgRun) No main class detected.
collector_1 | [error] Total time: 22 s, completed May 6, 2019, 5:15:20 PM
Dockerfile
FROM openjdk:11.0.2
# Env variables
ENV SCALA_VERSION 2.12.8
ENV SBT_VERSION 1.2.8
# Install Scala
## Piping curl directly in tar
RUN \
curl -fsL https://downloads.typesafe.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz | tar xfz - -C /root/ && \
echo >> /root/.bashrc && \
echo "export PATH=~/scala-$SCALA_VERSION/bin:$PATH" >> /root/.bashrc
# Install sbt
RUN \
curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
dpkg -i sbt-$SBT_VERSION.deb && \
rm sbt-$SBT_VERSION.deb && \
apt-get update && \
apt-get install sbt && \
sbt sbtVersion && \
mkdir project && \
echo "scalaVersion := \"${SCALA_VERSION}\"" > build.sbt && \
echo "sbt.version=${SBT_VERSION}" > project/build.properties && \
echo "case object Temp" > Temp.scala && \
sbt compile && \
rm -r project && rm build.sbt && rm Temp.scala && rm -r target
# Define working directory
WORKDIR /collector
ADD ./ /collector
CMD sbt run
我的 build.sbt 文件是这样的:
name := "collector"
version := "0.1"
scalaVersion := "2.12.8"
lazy val akkaVersion = "2.5.22"
lazy val akkaHttpVersion = "10.1.8"
lazy val configVersion = "1.3.4"
lazy val kafkaClientVersion = "2.2.0"
lazy val argonautVersion = "6.2.3"
lazy val root = (project in file(".")).enablePlugins(JavaAppPackaging)
libraryDependencies ++= {
Seq(
"com.typesafe" % "config" % configVersion,
"com.typesafe.akka" %% "akka-http" % akkaHttpVersion,
"com.typesafe.akka" %% "akka-stream" % akkaVersion,
"com.typesafe.akka" %% "akka-actor" % akkaVersion,
"org.apache.kafka" % "kafka-clients" % kafkaClientVersion,
"io.argonaut" %% "argonaut" % argonautVersion,
"io.argonaut" %% "argonaut-cats" % argonautVersion
)
}
mainClass in(Compile, run) := Some("com.mtp.WebSocketClientFlow")
mainClass in (Compile, packageBin) := Some("com.mtp.WebSocketClientFlow")
mainClass in Universal := Some("com.mtp.WebSocketClientFlow")
enablePlugins(DockerSpotifyClientPlugin)
enablePlugins(DockerPlugin)
解决方案
因为您不在正确的工作目录中。删除 CMD sbt run 和 ls /collector 以确保您在正确的位置。因为我遇到了这样的问题,我错了地方。
推荐阅读
- javascript - jQuery AJAX 响应在第二次尝试时不正确
- r - 从具有新结构的数据帧中提取子集
- python - 检测按键但只检测一次。键盘模块不能以这种方式工作
- vim - 退出vim后保留ConEmu屏幕缓冲区
- kubernetes - Kubernetes - 如果我在前者的代码中编写后者的 IP,一个服务可以使用另一个服务吗?
- r - 基于R中数据表第一行中的值的条件格式
- javascript - 获取表格中的删除按钮以在 jQuery 中工作
- objective-c - NSProxy 可以代替 NSView 子类吗?
- c# - 为什么 Gtk 示例在一种语言下运行而不是其他语言
- excel - 在 Excel Online 中创建的所有第一个文件工作表都具有相同的 ID