linux运行jar

news/2024/5/5 13:55:54

安装Java环境

  1. 下载Java安装包

首先,需要从Oracle官网或其他可信渠道下载适用于Linux系统的Java安装包。根据系统架构(32位或64位)选择合适的安装包。

  1. 安装Java

下载完成后,通过终端进入安装包所在目录,使用tar命令解压安装包。然后,将解压后的Java目录移动到/usr/local/目录下,并设置环境变量。具体步骤如下:

(1)解压安装包

 

bash复制代码

tar -zxvf jdk-版本号-linux-x64.tar.gz

(2)移动Java目录

 

bash复制代码

sudo mv jdk-版本号 /usr/local/java

(3)设置环境变量

编辑~/.bashrc文件,添加以下内容:

 

bash复制代码

export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

保存并退出编辑器后,运行source ~/.bashrc命令使环境变量生效。

  1. 验证Java安装

安装完成后,可以通过在终端输入java -version命令来验证Java是否成功安装。如果输出显示了Java的版本信息,则说明安装成功。

三、生成JAR文件

在Linux系统中生成JAR文件通常需要使用Java编译器(javac)将Java源代码编译成类文件,然后使用jar命令将类文件和相关资源打包成JAR文件。具体步骤如下:

  1. 编写Java源代码

使用文本编辑器编写Java源代码文件,保存为.java文件。

  1. 编译Java源代码

在终端中进入源代码文件所在目录,使用javac命令编译Java源代码文件。例如:

 

bash复制代码

javac MyProgram.java

这将生成一个或多个.class文件。

  1. 打包成JAR文件

使用jar命令将编译生成的类文件和相关资源打包成JAR文件。例如:

 

bash复制代码

jar cvf MyProgram.jar MyProgram.class

这将生成一个名为MyProgram.jar的JAR文件。

四、运行JAR文件

在Linux系统中运行JAR文件需要使用java命令,并指定要运行的JAR文件路径。具体步骤如下:

  1. 进入JAR文件所在目录

在终端中使用cd命令进入JAR文件所在的目录。

  1. 运行JAR文件

使用java命令运行JAR文件。例如:

 

bash复制代码

java -jar MyProgram.jar

这将执行JAR文件中的程序,并在终端中显示输出结果。

五、高级选项和注意事项

  1. 指定主类

如果JAR文件中包含多个类文件,并且需要指定一个入口类来运行整个程序,可以在生成JAR文件时使用-e选项指定主类。例如:

 

bash复制代码

jar cvfe MyProgram.jar com.example.Main MyProgram.class

这将指定com.example.Main类为JAR文件的主类。

  1. 设置类路径

如果JAR文件依赖其他JAR包或类文件,可以使用-cp或-classpath选项指定类路径。例如:

 

bash复制代码

java -cp ".:/path/to/lib/*" -jar MyProgram.jar

这将把当前目录和/path/to/lib目录下的所有JAR包添加到类路径中。

  1. 调试和日志记录

在运行JAR文件时,可以通过设置JVM参数来进行调试和日志记录。例如,使用-verbose:class参数可以打印类加载信息,使用-D参数可以设置系统属性等。具体参数可以根据需要进行设置。

  1. 性能优化和内存管理

对于大型或复杂的JAR文件,可能需要考虑性能优化和内存管理。可以通过调整JVM参数来优化程序的运行性能,例如设置堆内存大小、启用JIT编译等。同时,也要注意避免内存泄漏和性能瓶颈等问题。


http://www.mrgr.cn/p/72512367

相关文章

记录一个小问题

引发错误结果的代码: class Solution {List<List<Integer>> result = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> combine(int n, int k) {backTracking(n, k, 1);return resul…

开源向量数据库比较:Chroma, Milvus, Faiss,Weaviate

语义搜索和检索增强生成(RAG)正在彻底改变我们的在线交互方式。实现这些突破性进展的支柱就是向量数据库。选择正确的向量数据库能是一项艰巨的任务。本文为你提供四个重要的开源向量数据库之间的全面比较,希望你能够选择出最符合自己特定需求的数据库。 什么是向量数据库?向…

jar依赖批量上传Nexus服务器(二)

jar依赖批量上传Nexus服务器&#xff08;二&#xff09; 批量上传脚本 #!/bin/bash # copy and run this script to the root of the repository directory containing files # this script attempts to exclude uploading itself explicitly so the script name is important…

结构型设计模式

享元模式 享元模式&#xff08;Flyweight Pattern&#xff09;是一种用于性能优化的设计模式&#xff0c;它通过共享尽可能多的相似对象来减少内存使用&#xff0c;尤其是在大量对象的情况下非常有效。这个模式是在对象数量多而对象状态大部分可共享的情况下实现的。 享元模式…

C++并发编程

基本介绍 线程 C98标准没有直接提供原生的多线程支持 在C98中&#xff0c;并没有像后来的C11标准中那样的<thread>库或其他直接的多线程工具 然而&#xff0c;这并不意味着在C98中无法实现多线程。开发者通常会使用平台特定的API&#xff08;如Windows的线程API或POSI…

多线程中frida定位关键线程的方法

pthread_create 会先得到一个pthread_internal_t结构体最后会调用__pthread_internal_add并将返回值赋给pthread_create的第一个参数thread_out__pthread_internal_add 会将传入的 pthread_internal_t 加入到g_thread_list全局线程列表中,然后将传入的pthread_internal_t返回,…

【Qt 专栏】QByteArray详解(QByteArray 与 QString的区别)

本文转自:《Qt编程指南》 作者:奇先生 Qt编程指南,Qt新手教程,Qt Programming Guide 本节学习 QByteArray 的两种用法,第一种作为字符串处理类,类似 QString ,但 QByteArray 内部字符编码不确定,所以要慎用。第二种是作为纯的字节数组,里面可以包含多个 \0 ,经…

前端调用DRI后端API出现跨域资源共享(CORS)问题解决办法

在进行后端API开发时,有时会遇到“跨域资源共享 (CORS) 请求...被阻止“的错误,如图1所示。本文讲解如何在使用DRF(Django REST Framework)的后端API开发项目中解决这个问题。目录1. 引言2. 跨源资源共享和实现方法3. 在Django项目中配置django-cors-headers库Reference 1.…

CPDA|0到1突破:构建高效数据分析体系的秘密武器

在现今信息爆炸的时代&#xff0c;数据已经渗透到了我们生活的方方面面&#xff0c;成为了决策、创新和竞争优势的关键。因此&#xff0c;构建一套高效的数据分析体系&#xff0c;对于企业和个人而言&#xff0c;都是至关重要的。那么&#xff0c;如何在众多的数据海洋中脱颖而…

【超简单实用】Zotero 7 内置pdf背景颜色更改插推荐以及安装

Zotero beta7 pdf 内置颜色更换 zetore 6 很多成熟的插件在 zetore 7都不能用了。版本回退看起来内置文章的注释会被消除&#xff0c;所以又不想退回去。前几个月在找beta 7 的pdf 护眼色的插件一直没有&#xff0c;今天终于发现了&#xff01;&#xff01;&#xff01;&#…

数据结构——单向循环链表

一、单向循环链表 (一)单向循环链表的构造 单向循环链表的尾结点的指针域中必须指向链表的首结点的地址) 1)构造单向循环链表的结点 //单向循环链表中的结点有效数据类型,用户可以根据需要进行修改 typedef int DataType_t;//构造单向循环链表的结点,链表中所有结点的数据类型…

k8s网络配置

1 基础概念 1.1 containerPort、port、nodePort、targetPort的区别与联系containerPort:Container容器暴露的端口。containerPort是在pod控制器中定义的、pod中的容器需要暴露的端口。 port:service暴露在集群中的端口,仅限集群内部访问。port是暴露在cluster (集群网络)上的…

TCP-模拟BS架构通信

简介 bs是通过浏览器进行访问的每次访问都会开启一个短期的socket用来访问服务器的资源 响应报文的格式 服务端 bs架构中的b是浏览器&#xff0c;不需要我们书写&#xff0c;我们只需要书写服务端即可 服务端 public class Server {public static void main(String[] args) {S…

pg数据库id是vachar类型,需要按照数字大小排序

pg数据库id是vachar类型,需要按照数字大小排序 select * from table order by id; 直接拿order by id条件排序,会出现1002排在10019后面应该将id转化成int类型再排序,修改结果如下: select * from table order by cast(id,integer);本文来自博客园,作者:lsblk0402,转载请…

Poco框架实操:获取节点属性的高效技巧(一)

上周我们分享了Poco节点的各种关系以及使用场景,那么本周我们来聊一下,如何获取关于节点的更多信息。此文章来源于项目官方公众号:“AirtestProject” 版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途一、前言 上期推文我们介绍了Poco UI树下的节点关系…

高端制造业的经销商文件分发,怎样才能降低管理成本和风险?

对于高端制造业来说,经销商在制造业供应链中扮演着重要的角色,作为制造商与零售商之间的中介,协助制造商将其产品打入市场,扩大产品销售范围。因此制造业生产商与经销商之间存在紧密且频繁的文件传输需求,一个制造业生产商可能要与上百个经销商存在业务往来,经销商文件分…

【炼金术士】BatchSize对网络训练的影响

文章目录 1 BatchSize对于网络训练的影响2 调整学习率可以提高大BatchSize的性能3 实际训练时的建议3.1 设置初始学习率的方法3.2 多卡训练时学习率的设置 参考资料&#xff1a; 【深度学习】Batch Size对神经网络训练的影响【AI不惑境】学习率和batchsize如何影响模型的性能&…

报告!这里发现了一个赛博炼丹的神级平台!

众所周知,“赛博炼丹”是一个AI开发研究领域古老又神秘的活动,它往往对炼丹平台有很高的要求。如果你也是一路从“炼丹小白”成长到“资深AI算法工程师”,那你一定懂我在说什么?说好了,天台见!众所周知,“赛博炼丹”是一个AI开发研究领域古老又神秘的活动,它往往对炼丹…

2024年汽车软件开发状况调查结果出炉:软件研发人员必看

在今年1月底,嵌入式静态分析领域公认的行业领导及先驱Perforce公司联合北汇信息首次诚挚邀请中国汽车软件开发专业人士参加2024年汽车发展行业状况报告的调查。现调查结果报告已新鲜出炉!在全球调查结果中,本次调查来自亚洲的答卷占比39%,其中中国在亚洲内占比46%。如您希望…

大模型必备 - 中文最佳向量模型 acge_text_embedding

近期,上海合合信息科技股份有限公司发布的文本向量化模型 acge_text_embedding 在中文文本向量化领域取得了重大突破,荣获 Massive Text Embedding Benchmark (MTEB) 中文榜单(C-MTEB)第一名的成绩。这一成就标志着该模型将在大模型领域的应用中发挥更加迅速和广泛的影响。…