Spring 使用 apache 轴启动应用程序

Spring boot application with apache axis

我正在尝试 运行 一个 spring 引导 jar,其中包含 axis2 依赖项。我正在使用 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 ...

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

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

None 个解决方案有效。但是,当我 运行 应用程序 class 在 eclipse 中时,应用程序启动并且 运行s 完美。但是,一旦我创建了 jar,似乎什么都没有 运行。

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

Axis 似乎无法处理 运行 来自嵌套在另一个 jar 中的 jar。它在 Eclipse 中运行良好,因为 Axis jar 可直接在文件系统上使用,而不是嵌套在 Spring 引导应用程序的 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