本部分将针对在“一”中提出的两个问题发生原因,分别进行分析及处理。并且会介绍java的一些和处理问题相关的基本概念。
这是个很基础的问题,但是因为基本上都是用现有的IDE工具 来开发java程序,所以很少有人意识到这一点
但是在学习过程中,我想在命令行测试一些JVM参数的时候,发现自己脱离了IDE,竟然无法直接编译java程序!!
刚学Java的时候,很多jdk配置教程都要求设置JAVA_HOME、Path、CLASSPATH3个变量。而Java官网有这么一句话:jdk1.5之后的版本在安装时不用设置CLASSPATH变量。今天我就以jdk1.5为例,总结下三者的区别。
javac命令用于将 .java 源文件编译成 .class 字节码文件,在windows命令行中使用”javac -help”命令查看其用法:
这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”资料“即可领取 3T 免费技术学习资源以及我我原创的程序员校招指南、Java学习指南等资源)
前言:本文教你怎么用javac和java命令,讲解了classpath的原理,以及如何利用脚本(shell或bat)进行项目部署,离开ide,还原最本质的Java编译运行过程,并用简单的实例展示这些用法。
最近在写c++/c的一个小的项目,需要打成动态库,供java使用。就对java 调用c++/c代码做了简答了解,在此做记录。jni开发第一步,就是用javah命令生成生成c\c++头文件。
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
在终端输入的命令行对应着应用程序,如果不是系统自带的命令,那么系统需要环境变量来定位应用程序所在的文件路径。
在Java中,我们经常听到classpath这个东西。网上有很多关于“如何设置classpath”的文章,但大部分设置都不靠谱。
那好,不如咱们先来了解一下IDE的实现原理,这样一来,即使离开IDE,我们还是知道如何运行Java程序了。
Java开发中常用到环境变量的配置,下面简单介绍下Java中经常配置的环境变量:PATH和CLASSPATH。
想在当前路径下去运行非当前路径下的.class文件(即java可执行文件),亦即可在任意目录下都可以执行java程序。
需要使用的命令是:C:\Program Files\Java\jdk-13.0.2\bin\javac.exe
第二种情况,往往是这个场景,本地/测试环境运行的都是好好的,上线之后测试就是不行。
一. 解压安装jdk 在shell终端下进入jdk-7u79-linux-x64.bin文件所在目录, 执行命令 ./jdk-7u79-linux-x64.bin 这时会出现一段协议,连继敲回车,当询问是否同意的时候,输入yes,回车。之后会在当前目录下生成一个jdk1.7.0_29目录,你可以将它复制到 任何一个目录下。 二. 需要配置的环境变量 1. PATH环境变量。作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好 PATH变量后,就可以在任何目录下执行javac/java等工具了。 2. CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。我们 需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。 3. JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。 三. 三种配置环境变量的方法1. 修改/etc/profile文件 如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。 ·用文本编辑器打开/etc/profile ·在profile文件末尾加入: export JAVA_HOME=/usr/share/jdk1.7.0_29 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ·重新登录
大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个jar包的程序入口。具体的方法是修改jar包内目录META-INF下的MANIFEST.MF文件。比如有个叫做test.jar的jar包,里面有一个拥有main函数的main class:test.someClassName。我们就只要在MANIFEST.MF里面添加如下一句话:
1. PATH环境变量。作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好 PATH变量后,就可以在任何目录下执行javac/java等工具了。
前面我们讨论过包,知道字节码文件最终都会被放到和包名相匹配的树状结构子目录中。例如上一节的例子:
我们一般都是通过IDE(如Eclipse、Intellij Idea,STS等)来开发,调试java项目。
所有平台: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
javac 编译后会生成后缀为 .class 的文件,使用 java 命令加上该文件即可,此时不需要 .class 后缀;
4 - 运行TestNG TestNG可以以不同的方式调用: * Command line * ant * Eclipse * IntelliJ's IDEA 1) 命令行 假设你已经将TestNG加入到class path,调用TestNG最简单的方法事下面的:
classpath,顾名思义即java源代码编译后的字节码文件*.class的寻址路径。你需要将字节码文件放到公用目录下,否则java程序将无法搜索到相应的执行类。
-classpath: 设置用户类路径,它将覆盖CLASSPATH 环境变量中的用户类路径。若既未指定CLASSPATH 又未指定-classpath,则用户类路径由当前目录构成。 -sourcepath: 指定用以查找类或接口定义的源代码路径。与用户类路径一样,源路径项用分号 (;)进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。如果使用包,那么目录或归档文件中的本地路径名必须反映包名。
Path它用于指定Java路径的命令,当我们想编译Java当需要使用的程序javac.exe并运行.class当文件需要使用java.exe,此时Path设置的路径就发生作用了。由于Path设置的路径是jdk安装文件夹以下的bin相应的路径,以摩罗我的安装JDK文件夹为例,我的Path设置为:D:\JAVA\jdk1.6.0_38\bin,当我们须要调用javac.exe或者java,exe时就会自己主动到D:\JAVA\jdk1.6.0_38\bin文件夹以下去找javac.exe和java,exe。
在文章《Spark Submit的ClassPath问题》中,我探讨了针对spark-submit的Jar包,如何指定外部依赖的Jar包。同样的问题在本地部署时仍然存在。此时,运行Jar并不是通过spark-submit,而是通过java命令,例如: exec java -Xmx2000m -DMORT_HOME=$MORT_HOME -Ddata-set-parquet.path=$MORT_HOME/parquet -Dconfig.file=$MORT_HOME/mort.conf -jar $MOR
Java程序 运行在linux主机上, 通过shell脚本启动为进程。 Java程序中 通过定时任务,设置访问Hbase的时间间隔,设置告警规则,比如三次获取Hbase中的数据失败,则调用存过,遍历配置的告警号码,插入短信中间表,实现短信的发送。 项目结构如下
计算机只能识别机器码0101...编程语言->能执行的机器码 需要经过 预处理->编译->汇编->链接->机器码过程。一个语言处理系统的示意图如下:
RandomValuePropertySource 对于注入随机值(例如,进入秘密或测试用例)非常有用。它可以生成整数,长整数,uuids或字符串,如以下
对于学Java的人来说,成功配置环境变量是第一步,因为后期不论 你做什么工作,会发现都需要这些,接下来介绍如何安装与配置,我按照jdk1.6来说明,其他一致。
目的:本人健忘,以后难免会重装系统啥的,软件卸了装是常有的事,特此写此详细教程,一是方便自己以后重装的时候可以看看;二是如果有某位初学者有幸光临,也可以给一点参照。下面我会从JDK的下载、安装、环境变量的配置和其中的一些问题进行详细说明,Let go!
有时候我们需要直接用jdk提供的java命令来执行class文件让软件运行起来,特别是很多初学者,但经常会发现如下提示:
原文作者:souvc 博文出处:http://www.cnblogs.com/liuhongfeng/p/4177568.html
虽然写起动shell的频率非常不高。。。但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell。
当我们没有配置 jdk 的环境变量时,在 jdk/bin 目录外是运行不了 javac.exe (java 编译器) 和 java.exe (java 解释器) 的。
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考这篇博文-http://www.cnblogs.com/anai/p/4270214.html
环境变量,是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
以下过程为配置JDK环境变量: 1.右击“我的电脑”,点击“属性”:选择“高级”选项卡,点击“环境变量”: 2.在“系统变量”中,设置3项属性,JAVA_HOME,PATH,CLASSPATH(不分大小写) JAVA_HOME指明JDK安装路径,就是刚才安装时的路径C:/Program Files/Java/jdk1.6.0_21,此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等都需要依*此变量);
Spring Boot程序默认从application.properties或者application.yaml读取配置,如何将配置信息外置,方便配置呢? 查询官网,可以得到下面的几种方案: 通过命令行指定 SpringApplication会默认将命令行选项参数转换为配置信息 例如,启动时命令参数指定: java -jar myproject.jar --server.port = 9000 从命令行指定配置项的优先级最高,不过你可以通过setAddCommandLineProperties来禁用 Sp
程序员免不了要与windows和linux打交道,在windows写启动脚本时要要用到bat,而在linux时则要使用到shell脚步。shell脚步具有严格的格式,稍不注意就会出问题,今天分享一个小经验,但是受益程序员终身。下面是网上找来的一段shell脚本:
Linux是一个多用户多任务的操作系统,可以在Linux中为不同的用户设置不同的运行环境,具体做法是设置不同用户的环境变量。
类越来越多了,是时候搞一波编译了。我们不能总是依赖CLASSPATH环境变量,那个参数主要是放一些公共的类路径,实际开发的话,我们是跟着项目走的。
官网地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html
了解 Java 技术 https://www.java.com/zh_CN/about/
CentOS7.0虽然自带JDK1.7和1.8,运行“java -version”命令也可以看到版本信息,但是jdk的安装环境不全,比如缺少tool.jar和dt.jar等,这就导致“javac”等这样的命令即便配置了环境变量也不能用,所以要重新安装jdk,并且配置环境变量,并解决“javac”命令不可用的问题。
Ant是Java的生成工具,是Apache的核心项目; Ant类似于Unix中的Make工具,都是用来编译、生成; Ant是跨平台的,而Make不能; Ant的主要目的就是把你想做的事情自动化,不用你手动一步一步做,因为里面内置了javac、java、创建目录、复制文件等功能,所以可以直接点击Ant文件,即可编译生成你的项目。 下载地址:http://ant.apache.org/bindownload.cgi
到了这里,是不是开始膨胀了,想写一段代码来秀一下?好吧,满足你!国际惯例,我们写一段HelloWorld。我们在某个目录下记事本,编写一段代码如下:
领取专属 10元无门槛券
手把手带您无忧上云