首页 > 解决方案 > Jms依赖没有解决?

问题描述

您好我已经创建了一个 docker-compose.yml 文件作为波纹管配置

version: '3'
services:
  activemq:
    image: webcenter/activemq:latest
    ports:
      - 8161:8161
      - 61616:61616
      - 61613:61613
    environment:
      ACTIVEMQ_NAME: amq
      ACTIVEMQ_REMOVE_DEFAULT_ACCOUNT: 'True'
      ACTIVEMQ_ADMIN_LOGIN: admin
      ACTIVEMQ_ADMIN_PASSWORD: admin
    volumes:
      - /container_data/activemq/data:/data/activemq
      - /container_data/activemq/log:/var/log/activemq

我的gradle配置如下:

task startDocker(type: Exec) {
    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
        commandLine 'cmd', '/c', 'docker-compose', '-f', './docker-compose.yml', 'up', '-d'
    } else {
        commandLine 'docker-compose', '-f', './docker-compose.yml', 'up', '-d'
    }
}

jar  {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',
                'Implementation-Version': version,
                'Main-Class': 'com.jms.MyServer'
    }
}

当我独立运行我的 java 应用程序时,它运行良好,因为我使用以下命令的配置:

docker container inspect <container-id>

但是当我运行jar文件时,它无法找到jms的类

以下是我使用 jar 运行时遇到的错误

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: javax/jms/Destination
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)

我如何运行 jar 文件并解决此错误?

标签: javadockergradle

解决方案


我猜你有 jms 依赖项,这些依赖项没有打包在你的 jar 中,所以它不能作为独立运行。

如果您想将依赖项打包到 jar 中,您可以使用shadowone-jar 之类的东西,或者手动推出自己的解决方案也不难。

另一种选择是使用应用程序插件创建一个 zip 或 tar 包含

  1. 你的罐子
  2. 依赖罐子
  3. 启动脚本

推荐阅读