带有 apache Axis 的 Spring 启动应用程序

标签 spring maven spring-boot axis

我正在尝试运行一个 spring boot 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文件夹enter image description here的截图.
以下是我尝试过的解决方案:
  • 将 Axis jar 放置在与应用程序 jar 相同的目录中。
  • 在与应用程序 jar 相同的目录中创建 lib 文件夹并将 Axis jar 放在其中。
  • 修改 list 文件以包含类路径:/lib/

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

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

    最佳答案

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

    您可以配置应用程序的胖 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 Axis 的 Spring 启动应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28213372/

    相关文章:

    java - 具有上下文路径的 Spring Boot 静态内容

    spring - java.lang.UnsupportedOperationException : The user must supply a JDBC connection

    python - 如何从 Java 客户端向 Python FastAPI 服务器发出 JSON POST 请求?

    java - 如何使用 Spring MVC 从 Java Controller 而不是通过 Web 浏览器请求 HTML View ?

    java - JSTL 和 Spring : Accessing methods with arguments

    java - Eclipse 中的 Maven 2 项目错误图标

    java - 类包不包含 src.main.java,但它存在并且 eclipse 提示它

    apache - 使用Hadoop 2.4.1时Oozie 4.0.1构建错误

    java - Spring Boot Admin,客户端注册导致错误请求

    java - 在 Spring Boot 数据休息应用程序中获取 EntityManager