【问题标题】:Spring boot application with apache axis带有 apache 轴的 Spring Boot 应用程序
【发布时间】:2015-03-28 14:23:25
【问题描述】:

我正在尝试运行一个包含axis2依赖项的spring boot jar。我正在使用 spring boot maven 插件来构建 jar(带有依赖项)。当我尝试运行我的 jar 时,我的控制台中出现以下异常:

org.apache.axis2.AxisFault: The G:application\myapp\target\myapp.jar!\lib\axis2-1.6.1.jar file cannot be found.
at org.apache.axis2.deployment.repository.util.DeploymentFileData.setClassLoader(DeploymentFileData.java:111)
at org.apache.axis2.deployment.ModuleDeployer.deploy(ModuleDeployer.java:70)
at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:813)
at org.apache.axis2.deployment.RepositoryListener.loadClassPathModules(RepositoryListener.java:222)
at org.apache.axis2.deployment.RepositoryListener.init2(RepositoryListener.java:71)
at org.apache.axis2.deployment.RepositoryListener.<init>(RepositoryListener.java:64)
at org.apache.axis2.deployment.DeploymentEngine.loadFromClassPath(DeploymentEngine.java:175)
at org.apache.axis2.deployment.FileSystemConfigurator.getAxisConfiguration(FileSystemConfigurator.java:135)
at ...

然后我检查了我的罐子的结构。它里面有 lib 文件夹,其中包含所有的 jars(包括上面提到的轴 jar)。附上lib文件夹的截图。 以下是我尝试过的解决方案:

  1. 将轴 jar 放在与应用程序 jar 相同的目录中。
  2. 在与应用程序 jar 相同的目录中创建 lib 文件夹,并将轴 jar 放入其中。
  3. 已修改清单文件以包含类路径:/lib/

所有解决方案均无效。但是,当我在 Eclipse 中运行应用程序类时,应用程序会启动并完美运行。但是,一旦我创建了 jar,似乎什么都没有运行。

有人可以帮忙吗?提前致谢。

【问题讨论】:

  • spring-boot-loader 模块允许应用程序从嵌套的 jar 中加载类,这非常酷,但似乎axis2 试图自行“部署”jar,我不确定那是什么意思是,找不到。您可能必须在外部提供 jar
  • 如何手动提供jar?我已经尝试将它包含在类路径中,但它不起作用:(
  • 能不能打包成war文件部署到外部tomcat上?
  • 我没有安装tomcat,也不认为可以在服务器上安装它。我们只能依赖spring boot tomcat插件:(
  • hm,你把 jar 放在类路径上的方式一定有问题

标签: spring maven spring-boot axis


【解决方案1】:

看起来 Axis 无法应对从嵌套在另一个 jar 中的 jar 运行的情况。它在 Eclipse 中运行良好,因为 Axis jar 可以直接在文件系统上使用,而不是嵌套在 Spring Boot 应用程序的 jar 文件中。

您可以配置应用程序的 fat jar 文件,以便 Spring Boot 在运行时知道将 Axis jar 解压到临时位置。如果您使用的是 Maven:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <requiresUnpack>
                    <dependency>
                        <groupId>org.apache.axis2</groupId>
                        <artifactId>axis2</artifactId>
                    </dependency>
                </requiresUnpack>
            </configuration>
        </plugin>
    </plugins>
</build>

如果您使用的是 Gradle:

springBoot  {
    requiresUnpack = ['org.apache.axis2:axis2']
}

有关更多详细信息,请参阅Spring Boot documentation

【讨论】:

  • 非常感谢您的回答。一旦我进行了这些更改,它就起作用了。生成的异常没有提供信息,因此,我从来不知道这样的事情可能是这背后的原因。甚至 apache 也没有声明您不能从 jar 中执行轴(但他们为什么会这样做呢?)。或者,我设法在不知道这个原因的情况下使用 maven shade 插件使其工作(我猜 shade 插件可以工作,因为它将所有 jar 提取到类中)。无论如何,再次感谢您的回答。
猜你喜欢
  • 2021-08-19
  • 1970-01-01
  • 2016-08-07
  • 2018-12-05
  • 1970-01-01
  • 2019-08-12
  • 2016-06-13
  • 2016-04-08
  • 2021-10-20
相关资源
最近更新 更多