gpt4 book ai didi

scala - 编译后从类路径中删除条目

转载 作者:行者123 更新时间:2023-12-04 09:42:31 25 4
gpt4 key购买 nike

我有一个依赖jar项目的遗留 war 项目,该jar项目需要向类路径中添加一些非托管的jar进行编译。但是这些 jar 不应该在 war 中包装。所以我的问题是如何从 fullClasspath 中删除这些条目。以下内容不起作用:

val excludeFilter = "(servlet-api.jar)|(gwt-dev.jar)|(gwt-user.jar)"
val filteredCP = cp.flatMap({ entry =>
val jar = entry.data.getName()
if (jar.matches(excludeFilter)) {
Nil
} else {
Seq(entry)
}
})
fullClasspath in Runtime = filteredCP

我很确定必须有一种简单的方法来执行此操作,但到目前为止,它仍使我难以理解。

编辑:基于Pablo的建议,使用托管类路径而不是非托管类路径,我可以将问题改写为: 如何将本地jar添加到managedClasspath 中。我的 jar 放在(非常)非标准布局的本地文件夹中:
lib/testng.jar
lib/gwt/2.3/gwt-user.jar
lib/jetty/servlet.jar

所以基本上我正在寻找类似的东西:
libraryDependencies += "testng" % "provided->test"
libraryDependencies += "gwt" % "2.3" % "gwt-user" % "provided->compile"
libraryDependencies += "jetty" % "servlet" % "provided->default"

允许我从自己的本地lib文件夹中获取jar。

最佳答案

Classpaths页面上提供了一些信息,但是它不是非常清楚或详细。该信息也可以使用Inspecting Settings页面上描述的inspect命令获得。

基本上,对于配置X,用简写形式表示:

// complete, exported classpath, such as used by 
// 'run', 'test', 'console', and the war task
fullClasspath in X =
dependencyClasspath in X ++ exportedProducts in X

// classpath only containing dependencies,
// used by 'compile' or 'console-quick', for example
dependencyClasspath in X =
externalDependencyClasspath in X ++ internalDependencyClasspath in X

// classpath containing only dependencies external to the build
// (as opposed to the inter-project dependencies in internalDependencyClasspath)
externalDependencyClasspath in X =
unmanagedClasspath in X ++ managedClasspath in X

// the manually provided classpath
unmanagedClasspath in X =
unmanagedJars for X and all configurations X extends, transitively

因此,通常,当您想添加非托管库时,可以将它们添加到 unmanagedJars中。例如,如果您将库添加到 unmanagedJars in Compile,那么sbt将正确地在 unmanagedClasspath上包括 CompileRuntimeTest的库。

但是,您需要在此处进行显式控制。仅将库添加到希望 jar 放在的 unmanagedClasspath上,即 unmanagedClasspath in Compile。例如,在sbt 0.11.0+中:
unmanagedClasspath in Compile <++= baseDirectory map { base =>
val lib = base / "lib"
Seq(
lib / "testng.jar",
lib / "gwt/2.3/gwt-user.jar",
lib / "jetty/servlet.jar"
)
}

假设war插件使用运行时类路径,则这些jar将仅显示在编译类路径上,而不显示在war中。

关于scala - 编译后从类路径中删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com