怎样一次编译多个Java文件
⑴ java中如何将两个源代码文件放在同一目录中,用javac命令编译
javac -d . *.java;就可以了。这样打包并编译了所有的.java文件。我一直用这个命令,很方便。
⑵ java如何实现一次编译到处运行
JAVA之所以能实现一次编译,到处运行,是因为JAVA在每个系统平台上都有JAVA虚拟机(JVM),JAVA编译的中间文件class是由JAVA虚拟机在运行时动态转换为对应平台的机器代码.
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
Java 由四方面组成:
⑶ javacompiler编译多java文件
Java是否为动态语言?Java是静态类型语言,其类型判断在编译阶段进行。静态类型语言的优点在于结构规范,便于调试,且类型安全。然而,需要编写更多的类型相关代码,导致不便于阅读和理解。动态类型语言,如JavaScript和Python,类型检查在运行时进行,允许在运行时改变结构,提供更灵活的编程环境。Java被称为"准动态语言"的原因在于其反射机制,允许程序在运行时获取类的内部信息,如属性、方法、构造函数等,实现类似动态语言的功能。
了解ClassLoader及其作用。ClassLoader负责加载类到JVM中,确保程序正常运行。JVM启动时不会一次性加载所有类文件,而是动态加载,避免内存压力。ClassLoader分为多个类型,如Bootstrap classLoader、URLClassLoader、AppClassLoader等,它们分别负责加载核心类库、从文件夹和jar包加载类,以及应用类加载器。AppClassLoader加载应用类路径下的类,没有完全遵循双亲委派模型。
双亲委派机制确保类加载的顺序和安全性。在ClassLoader的loadClass()方法中,首先检查类是否已被加载,若未加载则调用父类加载器加载。如果父类加载器为空,则使用启动类加载器作为父类加载器。若父类加载器加载失败,抛出ClassNotFoundException异常,由ClassLoader自己处理。
JavaCompiler提供动态编译功能。使用JavaCompiler进行编译时,参数用于指定输入、输出和类路径。run方法成功返回0,若参数为null,则使用标准输入输出。编译test.java文件的示例代码为:int results = tool.run(null, null, null, "D:\\test\\Student.java");
通过URLClassLoader加载程序外的jar包,并进行动态编译。这涉及实体类Student,Java文件编译成class文件,封装成jar包,进行动态编译,最后通过反射赋值。在命令行工具中执行此过程。
编译非文件形式源代码。JDK 6的编译器API允许编译多种源文件形式,包括内存中的字符串、数据库中取出的文件等。通过JavaFileManager接口,可以控制输入、输出,并利用DiagnosticListener获取诊断信息。使用StandardJavaFileManager类时,需要遵循javax.tools.FileObject和javax.tools.JavaFileObject接口,以识别文件对象。
在SpringBoot项目中,可以动态编译工程内存在的bean。这依赖于JDK编译器API的能力,允许在运行时编译并加载源代码,实现灵活的开发流程。
⑷ 如何用javac命令编译一个目录以及子目录下所有的java文件呢
不想一个一个写文件名,就应该想到如何生成命令行。人类进化的动力就是想吃饱又想偷懒。
::Windows
D:Workflow>dir/s/ad>dir.txt
然后用 notepad++ 打开替换命令行。
其实我想吐槽的是,这个年代有几个人还需要手工来执行最原始的命令行。像 ant 就很方便的处理这些东西。用 eclipse 也行啊。
一个 ant 样例:
java-classpathant.jar;ant-launcher.jarorg.apache.tools.ant.launch.Launcher-vbuild.xml
<!--filename:build.xml-->
<projectdefault="compile">
<targetname="compile">
<mkdirdir="bin"/>
<javacsrcdir="src"destdir="bin"/>
</target>
</project>
⑸ 关于java中一次编译多个源文件时的编译顺序的问题
在java编译过程中,确实是会自动寻找的.当它先编译Test的时候,发现需要先编译TestPackage类,才能完成编译Test的工作,然后编译器开始编译TestPackage.
如果,你的这两个java文件都没有打包,并且在同一个目录下的话,你可以通过直接输入javac Test.java看到,尽管你没有发出命令要求编译TestPackage类,但是由于编译器检测到需要有TestPackage类的支持,才能编译Test,所以这时TestPackage也被编译了.
现在程序打包了,你先编译Test的这种情况下,编译器先找的是包,而你的包org.it315.example是不存在的,所以会出错
⑹ 如何用JAVAC一次性编译多个包下的JAVA文件
1.利用-cp
cd xxx
dir *.java/s/b > srclist.txt
or dir x:/yyy/zzz/*.java/s/b > srclist.txt
javac -cp .;xxx/yyy/zzz.jar;x/y/z.jar -d classes @srclist.txt
2.直接使用
这个,主要是在做一个独立的Java项目,它不依赖IDE,同时要在别人电脑上编译运行
下面编译运行用到了jar包、properties文件。首先进入项目的根目录下,注意:每一行,表示:DOS系统将执行的指令。
G:
cd testJava
上面,两个命令为模拟,进入项目根目录(具体目录,根据自己程序所在目录)。
javac -classpath .;../previousRecord.properties;../lib/jtds-1.2.5.jar;com/cjb/properities/jdbc.properties com/cjb/jdbc/*.java com/cjb/client/*.java -encoding UTF-8
上面命令,表示:编译com/cjb/jdbc下所有java类和com/cjb/client下所有java类,这些类用到了previousRecord.properties文件(它的路径是相对的)和jtds-1.2.5.jar的文件jar包(它的路径也是相对的),同时用的编码是UTF-8。
java -Xms64m -Xmx512m -cp .;../previousRecord.properties;../lib/jtds-1.2.5.jar;com/cjb/properities/jdbc.properties com/cjb/client/MailDispatcherOperation
上面命令,表示:执行com/cjb/client下的MailDispatcherOperation.class(它里面有Main函数)。
⑺ 如何用java以及javac编译工程
一、javac命令
javac 用于编译Java文件,格式为:
java [options] [sourcefiles] [@files]
其中:
options:命令行选项;
sourcefiles:一个或多个要编译的源文件;
@files:一个或多个对源文件进行列表的文件,有时候要编译的文件很多,一个个敲命令会显得很长,也不方便修改,可以把要编译的源文件列在文件中,在文件名前加@,这样就可以对多个文件进行编译,对编译一个工程很有用,方便,省事。
有几个比较重要的选项:
-d 用于指定编译成的class文件的存放位置,缺省情况下不指定class文件的存放目录,编译的class文件将和源文件在同一目录下;
-classpath 可以简写成-cp,用于搜索编译所需的class文件,指出编译所用到的class文件的位置,如jar、zip或者其他包含class文件的目录,指定该选项会覆盖CLASSPATH的设定;多个路径可用分号“;”分隔,linux系统上用冒号“:”分隔,看具体情况,反正不是冒号“:”,就是分号“;”,报错了改下。
-sourcepath用于搜索编译所需的源文件(即java文件),指定要搜索的源文件的位置,如jar、zip或其他包含java文件的目录;
需要注意windows下和linux下文件路径分隔符和文件列表(即-classpath和-sourcepath指定的文件)分隔符的区别:
windows下文件路径分隔符用 \ ,文件列表分隔符用分号 ;
linux下文件路径分隔符用 / ,文件列表分隔符用冒号 :
二、java命令
java 用于执行程序,格式如下:
java [options] classfile
options:命令行选项,一般用于 -classpath 指定要执行的文件所在的位置以及需要用到的类路径,包括jar、zip和class文件目录,会覆盖CLASSPATH的设定
三、脚本
如果要敲的命令很长,每次要编译运行的时候都要重新敲一遍,这是一件很痛苦的事情,所以用脚本可以大大方便你的工作 量。在linux下用shell脚本,windows下用bat批处理程序。因为是在linux下,我这里只是简单介绍一下shell,关于bat批处理 程序的语法自己网络一下,不难。
1. 开头
linux有很多不同的shell,通常使用bash(bourne again shell),程序必须以下面的行开始:
#!/bin/sh
#!用来告诉系统用后面的参数来执行程序,这里使用的是/bin/sh
要使你的脚本能够执行,还必须让这个文件有可执行权限,使用下面命令更改文件权限:
chmod +x filename
2. 注释
以#开始的句子表示注释,一直到这行结束,多写注释有利于以后重新看的时候知道自己在做什么
3. 变量
shell的脚本的变量都是字符串,不用申明类型,定义的时候直接 变量=值 即可,用到变量的的时候用 $变量 或者 ${变量},echo命令用于打印,举个例子:
#!/bin/sh
# 定义变量words,值为hello world
words="hello world"
# 打印变量words的值
echo $words
4. 命令
shell脚本里面可以直接任意使用linux命令,要用到什么命令直接敲进去即可。记住一些常用的命令:
cd 打开目录
ls -l 显示目录信息
rm -fr 递归删除目录及下面的文件,不提示信息
mkdir 创建目录
pwd 显示当前路径
kill -9 pid 强制杀掉某个进程号的进程
pkill 杀掉某个名字的进程
ps aux 显示运行进程信息
netstat -pan 查看网络端口监听情况
⑻ javac一次可同时编译数个Java源文件吗
这个是可以的。
解释 :javac可以编译多个文件,通过 “javac *.java"实现,前提是这些java文件都要在此编译路径下,如果不在的话,先通过cd命令进行位置切换即可。