首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >java idea:在jar中包括外部库

java idea:在jar中包括外部库
EN

Stack Overflow用户
提问于 2020-08-21 03:54:37
回答 1查看 178关注 0票数 3

我正在制作电报机器人,我需要.jar在云中部署它。

我正在使用intellij中的maven构建它,但是当试图在我的机器上执行时,它会抛出以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Exception in thread "main" java.lang.NoClassDefFoundError: org/telegram/telegrambots/bots/TelegramLongPollingBot<br>

正如我所理解的,这是因为maven没有将这个库打包到.jar中。

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-21 04:18:05

粗略地说,你有两个选择

  1. 制作一个“胖”罐子,里面有所有所需的课程。
  2. 创建一个引用其他JAR文件的“瘦”JAR

什么最适合你的处境是由你来决定的。你是怎么做到的:

制作一个“胖”罐子,里面有所有所需的课程。

要遵循这种方法,您可以使用Maven Shade插件。在包阶段,您将调用它的目标。这将把依赖项以及应用程序类中的类一起复制到一个JAR文件中。在POM中,它可以是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<executions>
  <execution>
    <goals>
      <goal>shade</goal>
    </goals>
    <configuration>
      <finalName>my-packaged-application</finalName>
      <transformers>
        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
          <mainClass>com.mycompany.MyApplication</mainClass>
        </transformer>
      </transformers>
      <filters>
        <filter>
          <!--
            Shading signed JARs will fail without this.
            http://stackoverflow.com/questions/999489/invalid-signature-file-when-attempting-to-run-a-jar
          -->
          <artifact>*:*</artifact>
            <excludes>
              <exclude>META-INF/*.SF</exclude>
              <exclude>META-INF/*.DSA</exclude>
              <exclude>META-INF/*.RSA</exclude>
            </excludes>
          </filter>
        </filters>
      </configuration>
    </execution>
</executions>

这种方法的优点是将应用程序打包为一个文件。缺点是它相当大。即使您只为一个新版本更改了几行代码,整个文件也会有所不同。

创建一个引用其他JAR文件的“瘦”JAR

在这种方法中,JAR只包含应用程序类。它的清单文件引用类路径,但还需要为依赖项提供JAR文件。要收集这些信息,可以使用Maven依赖插件,更确切地说是目标。您可以这样配置它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<executions>
  <execution>
    <id>copy</id>
    <phase>package</phase>
    <goals>
      <goal>copy-dependencies</goal>
    </goals>
    <configuration>
      <outputDirectory>${project.build.directory}/libs</outputDirectory>
      <stripVersion>true</stripVersion>
    </configuration>
  </execution>
</executions>

现在,在目标/库中有了所有依赖JAR文件,最后一件事是确保“瘦”JAR引用这些JAR。为此,请配置Maven Jar插件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<configuration>
  <archive>
    <manifest>
      <addClasspath>true</addClasspath>
      <classpathPrefix>lib/</classpathPrefix>
      <mainClass>com.mycompany.MyApplication</mainClass>
    </manifest>
  </archive>
</configuration>

在这种方法中,如果只更改应用程序代码的几行,那么只会替换应用程序JAR --依赖JAR将保持不变。缺点是,需要分发的不是一个文件,而是一个目录结构:应用程序JAR文件以及lib/文件夹及其内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63522466

复制
相关文章
从大的角度看AngularJS,原来如此强大
AngularJS 是一款流行的前端 JavaScript 框架,由 Google 开发和维护。它提供了丰富的功能和强大的工具,使开发者能够轻松构建交互式的单页面应用程序(SPA)。本文将深入探讨 AngularJS 的各个方面,包括框架概念、核心特性、模块化架构、数据绑定、指令系统、服务和依赖注入、路由和过滤器等。通过阅读本文,您将对 AngularJS 有更全面的了解,并能够更好地运用于实际项目开发中。
网络技术联盟站
2023/07/05
1660
从外部设置传入Go变量
前提:必须在build/run时指定 -ldflags="-X main.a=2.0 -X main.b=1" , 且a,b必须是string的变量,不能是常量, 不能是struct.
sunsky
2020/08/19
1.3K0
从内核角度看怎么设置connect超时
我们在编写网络程序时,通常需要连接其他服务端(如微服务之间的通信),这时就需要通过调用 connect 函数来连接服务端。但我们发现 connect 函数并没有提供超时的设置,而在 Linux 系统中,connect 的默认超时时间为75秒。所以,在连接不上服务端的情况下,我们需要等待75秒,这对我们不能接受的。
用户7686797
2021/04/08
2.1K0
将 Vim 设置为 Rust IDE
Rust 语言旨在以 C++ 开发人员熟悉的方式实现具有安全并发性和高内存性能的系统编程。它也是 Stack Overflow 的 2019 年开发人员调查中最受欢迎的编程语言之一。
用户8639654
2021/09/15
1.8K0
Tensorflow将模型导出为一个文件及接口设置
在上一篇文章中《Tensorflow加载预训练模型和保存模型》,我们学习到如何使用预训练的模型。但注意到,在上一篇文章中使用预训练模型,必须至少的要4个文件:
superhua
2018/08/28
1.8K0
AngularJS 路由--设置对象
$routeProvider.when 函数的第一个参数是 URL 或者 URL 正则规则,第二个参数为路由配置对象。
陈不成i
2021/07/26
9510
Angular2:从AngularJS 1.x 中学到的经验
本文选自《迈向Angular 2》,让我们看看Angular2解决了哪些在1.x版本中困扰我们的问题。
博文视点Broadview
2020/06/12
2.7K0
Angular2:从AngularJS 1.x 中学到的经验
方法的形式参数为引用数据类型时
方法的形式参数为引用数据类型: 基本数据类型(太简单,不是我今天要讲解的) 引用数据类型 1.方法的形式参数为类名时:需要该类的对象。(匿名对象的时候已经讲过了) 2.方法的形式参数为抽象类名时:需要该抽象类的子类对象。  3.方法的形式参数为接口名时:需要该接口的实现类对象。
黑泽君
2018/10/11
8470
go: kafka 将group设置为最新
有时,在确保group当前没有consumer的情况下,可以将这个group的偏移设置成最新,以保证下次启动时,group能从最新的消息消费。 代码:
超级大猪
2019/11/21
2.1K0
AngularJS 1 教程
随着浏览器性能提升,更多Web Page演变为Web App,特别是在中大型的项目中,就需要一个 前端框架 来:
小刀c
2022/08/16
4.6K0
再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结
ng-bind 单向数据绑定($scope -> view),用于数据显示,简写形式是 {{}}。
周陆军
2018/08/02
7.9K0
从语言学角度看词嵌入模型
在任何一个基于机器学习的自然语言处理(NLP)流水线中,词的向量化是其中典型的一个步骤,因为我们不能直接给计算机“喂单词”。在词的向量化过程中,我们为一个单词指定一个N维的向量,用来表示它的词义。结果,这成了处理过程中最为重要的一个步骤之一,因为一个“坏的”表示会导致失败以及为接下来的NLP任务带来不愿看到的影响。
AI研习社
2018/12/24
5850
怎样将Anaconda设置为国内的镜像
“ Anaconda是世界上最流行的数据分析平台(它们官网自己吹的nb),如果把镜像改为国内的可以节省很多时间。”
讲编程的高老师
2020/08/14
7.4K1
从Java内存模型角度理解安全初始化
如大家所知,Java代码在编译和运行的过程中会对代码有很多意想不到且不受开发人员控制的操作:
lyb-geek
2018/10/24
6950
导出文件时,responseType设置为'arraybuffer'出错?
由于请求的时候设置了responseType:’arraybuffer’,返回的是数据流,要取得json信息需要进行转换:
用户2323866
2021/06/23
2.6K0
TRICONEX 4101 基本形式可以描述为三层模型
工业物联网堆栈或工业物联网架构的基本形式可以描述为三层模型,将车间层连接到云。底部的“生产资产级别”包括运营技术(OT)领域,其中包括生产机器、控制和传感器等。第二层代表边缘层。它在工厂或流程与上层的集中式(远程或非远程)基础设施和服务之间架起了一座桥梁。edge在底层收集并整合来自多个来源的数据。最后,在顶层,中央系统从工厂资产和过程中获取信息,可以向下游传递反馈,并管理和“协调”边缘。
用户10384942
2023/04/23
2390
TRICONEX 4101 基本形式可以描述为三层模型
Angularjs1.X进阶笔记(1)—两种不同的双向数据绑定
html-Controller的双向数据绑定,在开发中非常常见,也是Angularjs1.x的宣传点之一,使用中并没有太多问题。
大史不说话
2019/03/01
3.5K0
Angularjs1.X进阶笔记(1)—两种不同的双向数据绑定
如何将Eclipse设置为中文版[通俗易懂]
我们知道Eclipse一个开放源代码的、基于Java的可扩展开发平台,不管学习还是工作都是一款不错的集成开发环境(IDE),但是对于一些初学者看到Eclipse上满满的英文字母可能会感到无从下手,汉化后可能还好点。
全栈程序员站长
2022/08/20
4.1K0
如何将Eclipse设置为中文版[通俗易懂]
如何将EasyCVR通道设置为默认在线?
EasyCVR平台具有强大的数据接入、处理及分发能力,可支持海量视频的轻量化接入与汇聚管理。平台可支持多协议、多类型设备接入,包括:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等。
TSINGSEE青犀视频
2023/05/19
1.1K0
将机器学习模型部署为REST API
这些疑问,我们以前碰到过,通过不断的摸索,试验出了不同的复杂机器学习的上线方法,来满足不同场景的需求。在这里把实践经验整理分享,希望对大家有所帮助。(我们的实践经验更多是倾向于业务模型的上线流程,广告和推荐级别的部署请自行绕道)。
机器学习AI算法工程
2019/10/28
3.4K0
将机器学习模型部署为REST API

相似问题

指令控制器中的角度设置脏形式

12

将AngularJS窗体设置为原始形式

11

在angularjs中将表单输入设置为脏?

12

手动将脏设置为字段不会修改css类angularJS?

11

在角度测试中将表单控件设置为脏

27
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文