Sbt / javaAgents /强制具有依赖性的jar

问题描述 投票:1回答:1

我想将"org.kohsuke" % "file-leak-detector" % "1.13" Java代理添加到我的sbt配置中。

//plugins.sbt
addSbtPlugin("com.lightbend.sbt" % "sbt-javaagent" % "0.1.5")

//build.sbt
enablePlugins(SbtWeb, PlayScala, DebianPlugin, JavaAgent)
javaAgents += "org.kohsuke" % "file-leak-detector" % "1.13"

但是这在运行时失败。

Failed to find Premain-Class manifest attribute in /usr/share/someApp/bin/../file-leak-detector/file-leak-detector-1.13.jar
Error occurred during initialization of VM
agent library failed to init: instrument

[我发现我需要具有依赖项的jar才能将其作为javaAgent运行,但是如果我从理论上可以从https://repo1.maven.org/maven2/org/kohsuke/file-leak-detector/1.13/下载该文件我不知道如何在sbt-javaagent插件中使用它。

我也尝试过:

javaAgents += ("org.kohsuke" % "file-leak-detector" % "1.13") from "https://repo1.maven.org/maven2/org/kohsuke/file-leak-detector/1.13/file-leak-detector-1.13-jar-with-dependencies.jar"

但没有运气。关于如何强制sbt-javaagent插件使用file-leak-detector-1.13-jar-with-dependencies.jar而不是file-leak-detector-1.13-jar的任何想法?

scala sbt javaagents sbt-native-packager resource-leak
1个回答
1
投票

我认为您正在使用from提供明确的URL做正确的事

如果您的项目需要的依赖项不存在于存储库,可以按以下方式指定指向其jar的直接URL:

from

[当我像这样提供显式libraryDependencies += "slinky" % "slinky" % "2.1" from "https://slinky2.googlecode.com/svn/artifacts/2.1/slinky.jar" 时,似乎可以在我的机器上运行

scope

注意javaAgents += JavaAgent( "org.kohsuke" % "file-leak-detector-1.13-jar-with-dependencies" % "1.13" % Runtime from "https://repo1.maven.org/maven2/org/kohsuke/file-leak-detector/1.13/file-leak-detector-1.13-jar-with-dependencies.jar", arguments = "help" ) 。我认为这是可行的,因为% Runtime很荣幸并且arguments = "help"输出

sbt run

同样,如果我设置了sbt:sbt-javaagents-leka> run [info] running (fork) example.Hello [error] File leak detector arguments (to specify multiple values, separate them by ',': [error] help - show the help screen. [error] trace - log every open/close operation to stderr. [error] trace=FILE - log every open/close operation to the given file. [error] error=FILE - if 'too many open files' error is detected, send the dump here. [error] by default it goes to stderr. [error] threshold=N - instead of waiting until 'too many open files', dump once [error] we have N descriptors open. [error] http=PORT - Run a mini HTTP server that you can access to get stats on demand [error] Specify 0 to choose random available port, -1 to disable, which is default. [error] strong - Don't let GC auto-close leaking file descriptors [error] listener=S - Specify the fully qualified name of ActivityListener class to activate from beginning [error] dumpatshutdown- Dump open file handles at shutdown [error] excludes=FILE - Ignore files opened directly/indirectly in specific methods. [error] File lists 'some.pkg.ClassName.methodName' patterns. ,它也会输出

arguments = "threshold=1"
© www.soinside.com 2019 - 2024. All rights reserved.