私たちはこの特定のライブラリの作成者であり、開発中にメイン クラスパスに置く方が簡単です。これは可能ですか?
Facelets リソースの場合、これはResourceResolver
webapp 自体のカスタムで可能です。
public class FaceletsResourceResolver extends ResourceResolver {
private ResourceResolver parent;
private String basePath;
public FaceletsResourceResolver(ResourceResolver parent) {
this.parent = parent;
this.basePath = "META-INF/resources"; // TODO: Make configureable?
}
@Override
public URL resolveUrl(String path) {
URL url = parent.resolveUrl(path); // Resolves from WAR which would also do META-INF/resources of JARs in WAR.
if (url == null) {
url = getClass().getResource("/" + basePath + path); // Resolves from JARs in WAR when base path is not META-INF/resources.
}
if (url == null) {
url = Thread.currentThread().getContextClassLoader().getResource(basePath + path); // Resolves also from anywhere else in classpath.
}
return url;
}
}
実行するには、webapp の で次のように構成しますweb.xml
。
<context-param>
<param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
<param-value>com.example.FaceletsResourceResolver</param-value>
</context-param>
JSF アノテーション スキャナーでスキャンする必要があるマネージド Bean などのアノテーション付き JSF アーティファクトの場合、これは不可能です。JAR は実際には/WEB-INF/lib
. JAR ファイルで提供される JSF 管理対象 Bean を参照する方法も参照してください。