aspectjweaver/javaagent 在 sbt-assembly fatjar 中
aspectjweaver/javaagent in a sbt-assembly fatjar
我有一个库,它要求我使用 aspectjweaver jar 指定一个 javaagent。
例如
java -jar -javaagent:/some/location/aspectjweaver-1.8.2.jar myFatJar.jar
这很好用。但是,我的 fatjar 运行ning 所在的环境没有 aspectjweaver-1.8.2.jar,我不能把它放在那里(获得一个更可配置的环境可能是我以后走的路).
有没有办法,最好是使用 sbt-assembly,将 aspectjweaver 打包到我的 fatjar 中,然后 运行 就这样了吗?如果重要的话,我的应用程序是一个使用 Scala 的 Spray,使用 sbt 构建。
约束条件
- 不能有单独的 jar
- 可以指定任意java命令
- 完全控制构建过程
如果您像您所说的那样完全控制构建过程,为什么不使用编译时织入而不是加载时织入?然后,您只需将 AspectJ 运行时库 aspectjrt.jar 打包到您的 fat jar 中即可解决问题。您甚至可以避免在应用程序启动时运行时编织的开销。
我能想到的使这种方法出现问题的唯一原因是您需要在构建过程的控制之外编织连接点。
我有一个库,它要求我使用 aspectjweaver jar 指定一个 javaagent。 例如
java -jar -javaagent:/some/location/aspectjweaver-1.8.2.jar myFatJar.jar
这很好用。但是,我的 fatjar 运行ning 所在的环境没有 aspectjweaver-1.8.2.jar,我不能把它放在那里(获得一个更可配置的环境可能是我以后走的路).
有没有办法,最好是使用 sbt-assembly,将 aspectjweaver 打包到我的 fatjar 中,然后 运行 就这样了吗?如果重要的话,我的应用程序是一个使用 Scala 的 Spray,使用 sbt 构建。
约束条件
- 不能有单独的 jar
- 可以指定任意java命令
- 完全控制构建过程
如果您像您所说的那样完全控制构建过程,为什么不使用编译时织入而不是加载时织入?然后,您只需将 AspectJ 运行时库 aspectjrt.jar 打包到您的 fat jar 中即可解决问题。您甚至可以避免在应用程序启动时运行时编织的开销。
我能想到的使这种方法出现问题的唯一原因是您需要在构建过程的控制之外编织连接点。