带本机打包器的sbt aspectj
我试图将sbt aspectj插件与sbt原生打包机一起使用,但遇到了一个问题,即aspectj加载时weaver jar的相关带本机打包器的sbt aspectj,sbt,aspectj,sbt-native-packager,sbt-aspectj,Sbt,Aspectj,Sbt Native Packager,Sbt Aspectj,我试图将sbt aspectj插件与sbt原生打包机一起使用,但遇到了一个问题,即aspectj加载时weaver jar的相关-javaagent路径引用了一个常春藤缓存位置,而不是打包的内容 也就是说,在运行sbt stage之后,通过bash-x target/universal/stage/bin/myapp/执行stage应用程序将产生以下javaagent: exec java-javaagent:/home/myuser/.ivy2/cache/org.aspectj/aspect
-javaagent
路径引用了一个常春藤缓存位置,而不是打包的内容
也就是说,在运行sbt stage
之后,通过bash-x target/universal/stage/bin/myapp/
执行stage应用程序将产生以下javaagent:
exec java-javaagent:/home/myuser/.ivy2/cache/org.aspectj/aspectjweaver/jars/aspectjweaver-1.8.10.jar-cp/home/myuser/myproject/target/universal/stage/lib/org.aspectj.aspectjweaver-1.8.10.jar:/home/myuser/myproject/target/universal/stage/lib/otherlibs.jar MyMainApp args
我的目标平台是Heroku,在Heroku中,工件在被有效地“推”到单独的“dyno”(非常类似于docker设置)之前被构建。这里的问题是,生成的-javaagent路径在构建“staged”可部署程序的机器上是有效的,但在最终运行它的地方将不存在
如何配置sbt aspectj插件以引用打包的库而不是来自ivy缓存的库
当前配置: project/plugins.sbt:
addSbtPlugin("com.typesafe.sbt" % "sbt-aspectj" % "0.10.6")
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.5")
build.sbt(选定零件):
更新 我尝试了几种方法,包括从现有映射中提取javaOptions的相关输出,但结果是sbt抛出周期性依赖错误 我有一些东西从技术上解决了我的问题,但感觉不满意。到目前为止,我直接包含一个aspectjweaver依赖项,并使用sbt原生打包程序概念
bashScriptExtraDefines
附加一个适当的javaagent:
更新的build.sbt:
import com.typesafe.sbt.SbtAspectj._
lazy val root = (project in file(".")).settings(
aspectjSettings,
bashScriptExtraDefines += scriptClasspath.value
.filter(_.contains("aspectjweaver"))
.headOption
.map("addJava -javaagent:${lib_dir}/" + _)
.getOrElse(""),
fork in run := true
)
您可以在sbt配置中添加以下设置:
.settings(
retrieveManaged := true,
libraryDependencies += "org.aspectj" % "aspectjweaver" % aspectJWeaverV)
AspectJ weaver JAR将复制到项目根目录中的
/lib\u managed/jars/org.AspectJ/aspectjweaver/aspectjweaver-[aspectJWeaverV].JAR
。您可以在sbt配置中添加以下设置:
.settings(
retrieveManaged := true,
libraryDependencies += "org.aspectj" % "aspectjweaver" % aspectJWeaverV)
AspectJ weaver JAR将被复制到
/lib\u managed/jars/org.AspectJ/aspectjweaver/aspectjweaver-[aspectJWeaverV].jar
在您的项目根目录中。我实际上通过使用插件向运行时添加代理解决了这个问题我实际上通过使用插件向运行时添加代理解决了这个问题我实际上通过使用插件向运行时添加代理解决了这个问题运行时