从命令行编译、运行、打包java文件

怎么用命令行运行.java文件 第一步 假如在e盘里有个文件夹名为Java,在Java文件夹里有一个事先写好的.java程序,如下: 第二步 打开命令行窗口(Window+R),输入cmd,点确定,如下: 第三步 转到HelloWorld.java文件所在的文件夹。 (1)文件在E盘,首先输入 e: 回车。 (2)输入cd Java 进入Java文件夹。 (3)输入javac HelloWorld.java 然后回车。 此时在Java文件夹中,生成了与.java文件同名的.class字节码文件。 (4)输入java Hel 阅读详情

开发工具用久了命令行都忘了怎么用了,做个笔记;

先从最简单的例子开始(先装jdk环境,当前我用的jdk11):

一、单个java文件和包结构;

先在电脑E:\Temp\javatest\JavacTest目录创建一个简单的java文件并编写代码;

 

按住shift右键打开powershell;

将java文件编译成class,输入:javac .\Hello.java

将多个java文件编译的时候可以用@files参数(powershell里@有冲突,标准cmd和linux可以用),files.txt里可以指定多个java文件,多个java文件间空格隔开(每个java用双引号括起来的时候注意反斜杠转义)

运行class文件,输入:java Hello (不写.class)

打成jar包,输入:jar cvf h.jar .\Hello.class

执行jar包,输入:java -jar .\h.jar (运行失败,没有主清单属性)

因为自动生成的jar包里的META-INF文件夹下的MANIFEST.MF文件不完全,用压缩软件打开jar包,编辑MANIFEST.MF文件,添加Main-Class: Hello,改动保存到jar包里;

重新执行jar包

注:MANIFEST.MF文件的格式比较严格,Manifest-Version是MF版本,Created-By通常由编译器生成(也可自定义),Main-Class指定主类(包名.类名完整格式),还有个Class-Path也常用(指定classpath和引用的jar等);

格式上每项“:”后面需要有一个空格,配置中间似乎不可以有空行,每行最多72个字符(应该是包括回车),换行后下一行需要空一个空格,文件最后要空两行(可能是标准,空一行也能运行);

比如写成这样:是可以运行的。

关于jar命令,jdk11的太长,我查看了一下jdk1.8的说明:

用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
    -c  创建新档案(创建jar包)
    -t  列出档案目录(查看jar包内容)
    -x  从档案中提取指定的 (或所有) 文件(解压内容)
    -u  更新现有档案(将文件压缩到jar包)
    -v  在标准输出中生成详细输出
    -f  指定档案文件名(指定打成jar包的名字)
    -m  包含指定清单文件中的清单信息(指定mf文件)
    -n  创建新档案后执行 Pack200 规范化
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用任何 ZIP 压缩(容量换速度)
    -P  保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
    -M  不创建条目的清单文件(-m失效,不会创建MANIFEST.MF)
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含以下文件(只在c/u参数有效,相当于先cd过去再执行jar,打包该目录下的文件)
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。

避免在jar包里修改MANIFEST.MF文件,打包时指定MANIFEST.MF即可(这个文件可自定义名称比如a.mf或者a.txt、x.abc等等);

先写一个MANIFEST.MF文件:

执行打包命令,指定MF文件:jar cvfm h2.jar .\MANIFEST.MF .\Hello.class (fm位置要跟h2.jar和mf文件对应起来)

执行jar包是可以运行的

PS:jar包其实就是一个有点特殊的压缩文件,跟zip一样,只不过里面包括一些java包的文件夹和class文件,外加一些配置,还有一个META-INF文件夹和下面的MANIFEST.MF文件;

可以手动建立jar包:新建个文件夹,将class文件和包文件夹放进去(我这只有个没包的Hello.class),然后再建个META-INF在里面编写MANIFEST.MF文件,然后打成压缩包,改压缩包后缀名为jar:

将Hello.java修改加上包结构再试:

生成class执行:javac Hello.java

运行class,输入:java com.test.Hello

因为没按包结构放class文件,新建com/test/文件夹,将Hello.class放入,然后就可以执行了:

使用javac的-d参数,直接指定生成的class文件输出目录,包结构会自动生成:javac -d classes .\Hello.java (win环境classes文件夹会自动生成,linux需要先创建classes文件夹)

使用java的-classpath或者-cp参数指定classpath参数,执行:java -cp .\classes\ com.test.Hello (-cp参数有多个的时候用英文的“双引号引起来”,中间用分号隔开)

打成jar包:jar cvfm h.jar .\MANIFEST.MF .\classes\com\test\Hello.class (可以打包,但运行是有问题的)

因为打的jar包默认是执行jar的这个目录:显然classes不是包路径;

解决方法1:修改mf文件,指定Class-Path;(不推荐)

解决方法2:命令行cd到classes文件夹下,再打包;

解决方法3:使用jar的-C参数指定打包文件,jar cvfm h.jar .\MANIFEST.MF -C .\classes\ com\test\Hello.class 或者 jar cvfm h.jar .\MANIFEST.MF -C .\classes\ .

二、多个java文件和包结构;

编写Hello和Add两个类,Hello类中使用Add类

生成class:javac -d cls .\Hello.java .\A.java

(((此外,javac还有一个-sourcepath参数,可以指定依赖的java文件位置,该依赖文件需要按照包结构放置目录,并且只会编译实际依赖的java文件,其他不会编译,例如:

把Add.java放到ajava\com\add下,并又添加了A.java、B.java、C.java,执行:javac -sourcepath .\ajava\ -d cls .\Hello.java

执行javac后,Add.class也会编译到cls下,其他没用到的ABC不会编译:

)))

执行class并用-cp指定classpath位置:java -cp .\cls\ com.test.Hello

打成jar包:jar cvfm h.jar .\MANIFEST.MF -C .\cls\ com\

单独编译测试,先编译Add.java,再编译Hello.java

先将Add.java编译到addcls文件夹下:javac -d addcls .\Add.java

再编译Hello.java,用-cp指定Add.class所在,执行:javac -cp .\addcls\ -d hellocls .\Hello.java

(跟java命令一样用-cp指定classpath,-cp参数有多个的时候用英文的“双引号引起来”,中间用分号隔开,-d指定生成目录)

测试运行,输入:java -cp ".\addcls\;.\hellocls" com.test.Hello

打包,输入:jar cvfm h.jar .\MANIFEST.MF .\addcls\ .\hellocls\

(当前目录会把addcls和hellocls文件夹也打包,所以修改MF文件的Class-Path指定classpath)

测试执行jar包:java -jar .\h.jar

三、依赖jar包的情况

先准备依赖的jar包,先将Add.java编译打包

编译:javac -d addcls .\Add.java (依赖的jar包需要有包结构)

打包:jar cvfM add.jar -C .\addcls\ . (需要按实际包结构打包,依赖时包里MF的cp指定似乎不起作用)

开始编译Hello.java用-cp指定依赖jar包,执行:javac -cp .\add.jar -d classes .\Hello.java (classes下只包含Hello.class)

测试执行:java -cp ".\classes\;.\add.jar" com.test.Hello

编写MF文件准备打包,指定依赖的add.jar在libs文件夹下:(指定依赖jar包位置是在所打jar包的外部)

将Hello.class打包:jar cvfm h.jar .\MANIFEST.MF -C .\classes\ . (打jar包就是压缩文件,所以跟依赖的jar无关,只要把class文件和MF打包就行)

可以新建个文件夹,将jar包放进去,add.jar按照MF的配置,要放在libs下:

测试执行jar包:

如果要把依赖的jar包也放到要打的jar包里,需要先把依赖的jar包放到classpath目录下解压,然后再一起打包:

把add.jar复制到classes文件夹下,执行解压:

解压后所有的class文件(包括依赖的)就都在classes下了:

然后把依赖的jar包去掉,统一打包就行:

执行jar包,可以运行:

 

 

 

 

 

 

 

 

 

参考:https://blog.youkuaiyun.com/fjjjyf/article/details/84020914?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242

http://www.blogjava.net/zeroone0/articles/38826.html

https://blog.youkuaiyun.com/zhifeiyu2008/article/details/8829637

https://blog.youkuaiyun.com/qq_36838191/article/details/91381780

java命令编译执行,maven打包执行 java命令编译执行,maven打包执行 文章目录java命令编译执行,maven打包执行1.1java命令编译执行,不带包名1.2java命令编译执行,带包名,1.3java命令编译执行,依赖外部jar包1.4maven打包执行,idea打包成可执行的jar1.5java命令(jvm)启动参数1.6java,javac,javap,jar命令 1.1java命令编译执行,不带包名 public ... 阅读详情

相关推荐

C/C++入门(一):从命令行运行编译器

最近接触的代码都是C++大工程,难免心里有点虚,所以还是决定先从基本的学起,捧起厚厚的C++ Primer(使用C++11标准),一点一点积累,争取摆脱菜鸡行列吧。 今天学了一下如何从命令行运行编译器,作出以下总结。 一、从命令行运行编译器 如果使用命令行界面,通常是在一个控制台窗口内(例如UNIX系统中的外壳程序窗口或者Windows系统中的命令提示符窗口)编译程序。假如main程序保存在文件prog1.cpp(不同编译器使用不同的后缀命名约定,最常见的有.cc,.cxx,.cpp,.cp,.C等)中,可

B_gorgeous的博客 6367

Java程序设计基础——cmd编译运行java文件详细步骤

详细步骤1.打开cmd,进入源文件所在的文件夹2.编译3.运行4.编译运行结果5.安装多个JDK,切换编译文件 1.打开cmd,进入源文件所在的文件夹 方法一:按 Win+R 快捷键,输入cmd,然后进入源代码所在的文件夹(我的源代码目录为D:\Java,进入文件夹输入“cd 文件夹名”,退出当前文件夹输入“cd\”)。 方法二:在源代码目录输入cmd,按Enter键。 2.编译 输入“javac 源文件名.java”,按Enter键。这时源代码文件夹会多出源文件名.class文件,就是所说的字

正在路上 4万+

[华为]华为无线控制器AC6508简单配置实例

用户需求:3个地址段,分别是领导、员工、访客,访问控制策略是只允许访客上网,不允许访客访问内网。 vlan173为设备的管理地址和AP获取的地址,领导、员工、访客的vlan分别是vlan131/vlan132/vlan133 首先是许可的下载,使用华为的账号登陆http://app.huawei.com/isdp ,然后按照说明输入许可,下载许可,将许可导入到设备。 web界面访问后,直接按照配置向导配置就可以了。 1.基本配置里主要配置license、设备名称、设备时间 2.端口配置:连接上

日子_很简单 2万+

如何在命令行编译运行java程序?

2023年5月29日,周一下午:好久没写java程序了,今天居然忘了怎么用命令行编译运行java程序了,还好后来想起来了,为了避免忘记,写篇博客记录一下。

m0_61629312的博客 3916

LangChain + PlayWright实战:5分钟搞定网页自动化测试(附完整代码)

本文详细介绍了如何利用LangChain与PlayWright构建智能网页自动化测试系统。通过环境配置、核心架构设计、实战Agent构建及性能优化等步骤,开发者可以快速实现高效的Web操作自动化,提升测试效率。文章还提供了完整代码示例和典型问题解决方案。

weixin_27791839的博客 240

国内优秀MES开源框架

一套springboot 开源框架 代码标准规范化。 界面展示 演示地址 http://wangziyangmes.pzzd.xyz 用户名admin 密码123 系统管理 工艺管理 计划管理 物料管理 *用户管理* *工艺路线管理* 工单下达...

q707231019的博客 2万+

java文件编译为class文件需要键入什么命令_将单个 java 文件编译为 class 打包为 jar 并运行 - 命令行操作模式...

注意:1、TestOracle.java 与文件里面 class 同名2、windows 多依赖包用;分隔,linux 用:分隔如:java -Xbootclasspath/a:ojdbc6.jar;xxx.jar -jar testOracle.jarjava -Xbootclasspath/a:ojdbc6.jar:xxx.jar -jar testOracle.jar带依赖路径编译:PS...

weixin_33982355的博客 1000

AI使用指南:6个超实用的Prompt提示词模板

最近越来越多人开始接触AI,但其实想要让AI更懂你,关键是掌握对的提示词模板!今天就给大家分享6种超实用的Prompt提示词模板,不管你是小白还是老手都能用

程序员世杰 8177

命令行编译java程序_命令行编译java程序的三种方法

manifest文件那一段参考https://sites.google.com/site/waue0920/Home/java/java-de-da-bao-chengjar-fang-fasss@ssstekiMacBook-Pro[src] lltotal 16drwxr-xr-x 4 sss staff 136 3 5 17:39 class_helloworld/drwxr-...

weixin_29349409的博客 476

CTK Plugin Framework插件框架学习1--Qt编译CTK

【代码】Qt编译CTK。

贝勒里恩的博客 7434

正弦波、方波、三角波和锯齿波信号发生器——Multisim电路仿真

调节方波信号的占空比,也就是改变输出信号的高低电平时间比例,可以设置电容不同的充放电时间来达到目的,RP2可以使得电容具有不同的充放电时间,其中二极管起到限制电流流向的作用。假设U+>U,那么输出端就达到正向饱和,电容开始充电,当电容电压大于同相输入端电压时,此时电容开始放电,由此往复,从而产生方波信号。3,正反馈支路占优势,电路开始起振并不是稳定的,振荡会不断增大,最终将导致运放饱和,输出的波形是削波失真的正弦波。通常在电路中引入负反馈,例如使用负温度系数的热敏电阻,以自动稳定增益,防止输出波形失真。

XU157303764的博客 5323

Java程序在命令行下编译运行打Jar包

本次练习在命令行下编译运行java程序,以及将java程序打jar包运行。一、本程序有三个类, Teacher类:public class Teacher { private String name; private String subject; Teacher() {}; Teacher(String name, String subject) {

本人整理的笔记与总结,涉及Android,Java,React,设计模式,算法等,愿对大家有帮助 2411

计算机视觉教程1-1:透视空间与透视变换

在生活中,透视现象很常见,其物理本质是光的直线传播。由于人眼与相机在捕获图像时均存在透视现象,因此计算机几何基于透视空间进行研究。本节介绍透视变换原理

FRIGIDWINTER的博客 3092

java命令行编译运行、打包jar

过程:java文件→class文件→exe执行文件 --------------------------------------------- 一、编译:从.java生成.class (1)eclipse编译: 在菜单栏里选择"项目"→"构建"/"自动构建",就会在workspace的项目里的bin目录下自动生成.class文件,不需要手动一个个去编译。 ...

weixin_30379911的博客 333

实战:RK3568 Android14 集成 AP6212A WiFi/BT 二合一模块

AP6212A 的集成在 RK3568 上非常成熟。只要电源、32K 时钟、SDIO 线序、UART 流控这四点硬件没问题,软件上主要是 DTS 对应的 GPIO 别填错即可。希望这篇博文能帮你一次点亮 WiFi 和蓝牙!

qq_33427070的博客 1450

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Windows命令行环境下java,jar,javac编译演练

Windows命令行环境下java,jar,javac编译演练 [参考] jar,java,javac 命令详解 (http://blog.youkuaiyun.com/emili/article/details/5749254) Windows命令行环境下javac,java,jar编译、打包、运行演练的例子使用的是《Java编程思想.第四版》的generics/coffee代码。演练过程中我将Coffee...

暧暧远人村,依依墟里烟 ... 1701

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java命令行编译命令_Java_java命令行编译运行

现在写java或者安卓项目都是使用IDE完成,但是有些简单的工作,使用IDE太浪费了,比如打包一个类的jar,如果使用命令行,也非常简单;所以复习一下,便于以后翻阅;1.创建文件Hello.javaHello.java目录为:D:/com/raise/base/Hello.java内容:package com.raise.base;//指定包名//需要导包的在这里导入public class He...

weixin_34467247的博客 360

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java jar 打包库_Java之 将程序打包成jar包

准备材料:1.java文件:Helloworld.javapackagecom.ray;public classHelloWorld{public static voidmain(String[] args) {System.out.println("Hello!jar");}}2.指定目录:建一个目录,来存放.class文件和.jar文件。 本文指定目录为 E:\myclass 。一.命令行形式...

weixin_32240065的博客 288

java 编译打包命令_java命令行编译运行、打包jar

过程:java文件→class文件→exe执行文件---------------------------------------------一、编译:从.java生成.class(1)eclipse编译:在菜单栏里选择"项目"→"构建"/"自动构建",就会在workspace的项目里的bin目录下自动生成.class文件,不需要手动一个个去编译。(2)命令行编译:进入src目录,直接javac c...

weixin_34528410的博客 617

Java: How to compile and run Java application in command line(在命令行中编译运行java程序)...

today下了班,然后再开始尝试,网上找到了两篇blog,也是看的confused,不知道是他写的比较mess还是什么,在自己的环境总是run起来,百度一堆都是些rubbish,然后终于还是想着用几个keywords来Google一下,然后就把自己的question给solve了。这里ke...

chiweihun1888的博客 542

java编译运行和生成jar包

需要编译运行以及打包的HelloWorld.java文件内容如下: package cn.sample; public class HelloWorld { public static void main(String args[]) { System.out.println("Hello,World!"); } }创建如下目录: myApp |--

在路上 1万+

Java_java命令行编译运行

现在写java或者安卓项目都是使用IDE完成,但是有些简单的工作,使用IDE太浪费了,比如打包一个类的jar,如果使用命令行,也非常简单;所以复习一下,便于以后翻阅; 1.创建文件Hello.java Hello.java目录为:D:/com/raise/base/Hello.java 内容: package com.raise.base;//指定包名 //需要导包的在这里导入

y22222ly的专栏 627

Hadoop 命令行运行实例

打包 为了能够在命令行中运行程序,首先需要对他进行编译和打包,下面就分别展示了编译和打包的过程编译代码如下:javac -classpath /usr/local/hadoop/hadoop-1.0.1/hadoop-core-1.0.1.jar -d wordcount_class wordcount.java上述命令会将wordcount.java编译后的所有class 文件到wordco

左手coding,右手cooking 856

将java项目打包运行

如何将java项目打包运行呢? 首先,我们编写的java程序在编译完都会生成相应的字节码文件,在bin目录下面 就是如果,我们想不用eclipse之类的工具运行代码,而采用命令行的方式,会是怎样呢?看下图 我们可以直接进入项目的bin目录,使用java指令来运行项目 那么如果我们如何将项目打包运行呢? 问题一 将...

佛系程序员的野蛮之道 1170

命令行下Java的编译及运行(2)

上篇博文中说明了如何通过命令编译及运行自己的Java文件。但是当前都是以项目为单位的,如何组织项目中的文件以及对项目的编译运行,是命令行编译主要解决的问题。   1. 项目组织   我们以下面的项目作为样例来说明: Test/ |-- Test.jar |-- classes |   |-- Main.class |   |-- OutterTest.class |  

2> /dev/null 572

java打包/命令行方式运行jar(命令行进行程序测试)

1 public class Testtmp { 2 public static void main(String[] args) { 3 // TODO Auto-generated method stub 4 for(int i=0;i<args.length;i++){ 5 ...

a313469292的博客 1023
上一篇: JavaDemo——自定义类加载器加载class文件
下一篇: JavaDemo——探索CORBA的IDL与Java的应用
FlyLikeButterfly
博客等级 码龄9年 223粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值