我有一个通过运行sbt package创建的jar
我已经在build.sbt的jar中设置了主文件
mainClass in (Compile, packageBin) := Some("com.company.mysql.Main")
addCommandAlias("updatemysql", "runMain com.company.mysql.Main")我试过了
sbt "runMain target/scala-2.12/update-mysql_2.12-0.1-SNAPSHOT.jar"
sbt target/scala-2.12/update-mysql_2.12-0.1-SNAPSHOT.jar com.company.mysql.Main
sbt target/scala-2.12/update-mysql_2.12-0.1-SNAPSHOT.jar:com.company.mysql.Main
sbt update-mysql-assembly-0.1-SNAPSHOT.jar/runsbt run update-mysql-assembly-0.1-SNAPSHOT.jar ^即使在build.sbt中设置了主类,如上面的几行所示,也会得到No main class detected。
我需要通过sbt运行jar,因为这是我知道如何使用-Dpath.to.config.param=new_value覆盖jar中包含的配置文件的唯一方法
发布于 2019-07-18 17:18:17
在sbt中,run和runMain使用包含所有依赖项的类路径以及包含编译任务输出的文件夹-这意味着它们都不会将JAR作为参数。
我认为可以通过编写一个依赖于package任务(即JAR文件路径值)输出的自定义任务来从sbt运行这个特定的JAR,并将其作为外部进程运行……虽然从问题上看,这似乎不是真正的问题。
实际的问题是使用传递给JVM的标志来运行JAR,而不是程序本身,这可以通过如下方式来实现:
# clean assembly ensures that there is only 1 JAR in target
# update-mysql_2.12-*.jar picks the only JAR no matter what is its version
# -D arguments NEED to be passed before -jar to pass it to JVM and not the JAR
sbt clean assembly && \
java -Dpath.to.config.param=new_value -jar target/scala-2.12/update-mysql_2.12-*.jarhttps://stackoverflow.com/questions/57066977
复制相似问题