我正在尝试创建一个嵌入式 Jetty 的“FAT”jar 和我的代码。不幸的是,如果我从 jar 中运行,我会收到此错误:No Spring WebApplicationInitializer types detected on classpath
如果我打开罐子,它工作得很好。
问题是我可以从 jar 中运行应用程序还是必须将其解压缩?
这是一个示例项目和重现问题的步骤:
git clone https://github.com/steveliles/jetty-embedded-spring-mvc-noxml.git
cd jetty-embedded-spring-mvc-noxml
mvn clean install
cd target
java -jar jetty-noxml-1.0-SNAPSHOT.jar
您将获得此输出“...在类路径上未检测到 Spring WebApplicationInitializer 类型...”。
但如果你这样做:
mkdir temp
cd temp
unzip jetty-noxml-1.0-SNAPSHOT.jar
java -cp 。com.sjl.Main
这将工作得很好。
那么有什么办法可以直接从 jar 中完成这项工作而无需先打开包装呢?
== 更新 ==
该项目的作者解决了这个问题。从阴影 jar 中提取 webapps 需要以下代码:
parser = new AnnotationParser() {
@Override
public void parse(Resource aDir, ClassNameResolver aResolver) throws Exception {
if (aDir.isDirectory()) {
super.parse(aDir, aResolver);
} else {
super.parse(aDir.getURI(), aResolver);
}
}
};