1

我正在尝试创建一个嵌入式 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);
           }
       }
    };

见:https ://github.com/steveliles/jetty-embedded-spring-mvc-noxml/commit/789663310b2fa2bdc0b101658275758a26cec229

4

0 回答 0