精华内容
下载资源
问答
  • 主要介绍了Eclipse不自动编译java文件的终极解决方法,需要的朋友可以参考下
  • 命令行编译java文件

    千次阅读 2019-02-13 20:05:38
    1.用记事本或者Notepad++编写一个完整的java文件,保存为.java文件。 import java.util.*; public class shuchu{ public static void main(String[] args) { Scanner in=new Scanner(System.in); System.out....

    1.用记事本或者Notepad++编写一个完整的java文件,保存为.java文件。

    import java.util.*;
    public class shuchu{
        public static void main(String[] args) {
    	Scanner in=new Scanner(System.in);
    	System.out.print("what is your name?");
    	String name =in.nextLine();
    	System.out.print("How old are you?");
    	int age=in.nextInt();
    	System.out.print("Holle,"+name+".Next year,you'll be "+(age+1)+".");
    	}
    }
    

    2.cmd,打开命令提示符
    在这里插入图片描述
    3.进入.java文件目录,输入命令 :cd 位置
    在这里插入图片描述
    4.键入命令,javac 文件名.java。
    在这里插入图片描述
    javac程序是一个java编译器,将.java文件编译成.class文件。编译成功会自动生成一个.class文件。
    在这里插入图片描述
    5.键入命令,java 文件名。注意此时也必须在.class文件目录下,若不是重复第三步。并且此步骤文件名后不需要加.class后缀!!!
    在这里插入图片描述
    运行成功!!!

    展开全文
  • 主要介绍了在dos窗口中编译和运行java文件方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • hello, I'm Shendi 因为最近在写自己的工具包,在控制台模块有个需求,就是想与 JShell ...还有一种是Java语言内置的脚本解析器,不过那个是解析 js 的,并不是Java(可以进行一些+-*/等js操作) 对于脚本的这...

    hello, I'm Shendi

     

    因为最近在写自己的工具包,在控制台模块有个需求,就是想与 JShell 一样,将用户输入的字符串转成代码执行

    这里附上我写的工具包地址: https://github.com/1711680493/ShendiKit

     


    目录

    编译思路及方法

    Javax.tools

    最简单的编译方式

     

    使用 CompilationTask

    编译字符串的Java代码

    控制台接收Java语句执行


    对于将字符串解析成代码运行,这个有很多博客写到了,都是用的都是 Commons Jexl 包

     

    还有一种是Java语言内置的脚本解析器,不过那个是解析 js 的,并不是Java(可以进行一些+-*/等js操作)

    对于脚本的这种方法,存在于 javax.script 包中, ScriptEngine

     

    编译思路及方法

    因为Java是静态语言,所以只能另择他法

    可以通过将代码写入Java文件中,并将其编译,使用 ClassLoader 加载进来运行

    这篇文章的重点为Java代码编译Java文件

     

    对于编译Java文件,有多种思路

    • 调用使用 Javac 命令,这种方式可能会出现很多问题,比如用户未设置环境变量什么的
      • 这种方式使用Runtime类就行
    • 在Java 1.6开始,提供了 javax.tools 包用来编译java文件

     

    Javax.tools

    最简单的编译方式

    一个简单的编译代码的操作如下

    // 获取系统编译器
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    // 进行编译操作
    compiler.run(null, null, null, "C:/Users/Administrator/Desktop/Test.java");

     

    JavaCompiler 的 run 函数接收四个参数

    分别为

    1. in - “标准”输入; 使用System.in如果为null
    2. out - “标准”输出; 如果为空,请使用System.out
    3. err - “标准”错误; 如果为空,请使用System.err
    4. arguments - 传递给工具的参数

    第四个参数为 javac 命令的参数,是一个可变参数,没有时,则控制台会出现 Javac 的提示

     

    返回值为 0 则代表编译成功

    运行后 Test.class 文件就在同目录出现了


     

    使用 CompilationTask

    还有一种方法是通过CompilationTask来进行编译,例子在 JavaCompiler 文档中有,如下

    public class CompilerTest {
        public static void main(String[] args) throws Exception {
           // 要编译的文件集合
           File[] files1 = new File[] {new File("C:/Users/Administrator/Desktop/Test.java")};
           
           // 获取系统编译器
           JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
           // 从编译器中获取基础Java文件管理器
           StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
           
           // 文件管理器中获取Java文件,并添加到任务执行
           Iterable<? extends JavaFileObject> compilationUnits1 =
               fileManager.getJavaFileObjectsFromFiles(Arrays.asList(files1));
           compiler.getTask(null, fileManager, null, null, null, compilationUnits1).call();
           
           // 关闭文件管理器
           fileManager.close();
    	}
    }

    上面代码的结果与上一种方法一致

     

    主要是 JavaCompiler 的 getTask 函数,此函数将获取编译任务,并可以执行

    对于最后一个参数 compilationUnits,可以在 StandardJavaFileManager 中进行转换获取

    也可以自行定义JavaFileObject


     

    编译字符串的Java代码

    下面的例子将字符串编译成 class 文件

    package shendi.test.compiler;
    
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.util.Arrays;
    
    import javax.tools.JavaCompiler;
    import javax.tools.JavaCompiler.CompilationTask;
    import javax.tools.JavaFileObject;
    import javax.tools.SimpleJavaFileObject;
    import javax.tools.StandardJavaFileManager;
    import javax.tools.ToolProvider;
    
    public class TestCompiler extends SimpleJavaFileObject {
    	private String code;
    	
    	protected TestCompiler(String className, String code) throws URISyntaxException {
    		super(new URI(className), Kind.SOURCE);
    		this.code = code;
    	}
    
        @Override
    	public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
    		return code;
    	}
    	
    	public static void main(String[] args) throws URISyntaxException {
    		
    		JavaCompiler c = ToolProvider.getSystemJavaCompiler();
    		String code = "class Test {"
    				+ "public static void main(String[] args) {"
    					+ "System.out.println(\"hello, world\");"
    				+ "}}";
    		
    		// 自定义 JavaFileObject 可以将字符串转Java文件对象
    		JavaFileObject jo = new TestCompiler("Test", code);
    		Iterable<? extends JavaFileObject> it = Arrays.asList(jo);
    		// 这个文件管理器可有可无
    		StandardJavaFileManager manager = c.getStandardFileManager(null, null, null);
    		CompilationTask task = c.getTask(null, manager, null, null, null, it);
    		task.call();
    		
    	}
    
    }
    

    奇怪的是,使用 IDE 或者 javac 将代码编译后,运行出错

    经过种种排查,我写测试文件都在一个项目,之前写注解处理器,... 删除后问题解决

     

    上述代码执行后,有一个疑问,class文件在哪呢?

    因为没有设置参数,默认保存在项目根目录

     

    对于Compiler的一些其他的操作,可以参考此文 https://blog.csdn.net/u010398771/article/details/90474813


     

    控制台接收Java语句执行

    因为上面这种代码我运行出错,所以使用 run 的方式来编译文件

    思路为接收用户输入代码,封装进文件并编译此文件,读取此文件流使用ClassLoader加载进JVM运行

    package shendi.test.compiler;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.lang.reflect.Method;
    import java.util.Scanner;
    
    import javax.tools.JavaCompiler;
    import javax.tools.ToolProvider;
    
    public class TestCompiler extends ClassLoader {
    	
    	public static void main(String[] args) throws Exception {
    		
    		Scanner sc = new Scanner(System.in);
    		
    		while (true) {
    			System.out.print("请输入代码: ");
    			String code = sc.nextLine();
    			
    			// 退出死循环命令
    			if ("exit".equals(code)) break;
    			
    			// 将语句封装成代码编译得到字节码
    			byte[] classByte = compiler(code);
    			
    			// 使用类加载器来将byte[]定义成类,需要自定义类加载器(此类继承ClassLoader)
    			Class<?> tempClass = cl.defineClass("Temp", classByte, 0, classByte.length);
    			// 需要注意的是,一个类加载器不能加载相同的类(重新加载),所以定义完后要重写new一遍
    			cl = new TestCompiler();
    			
    			// 反射调用函数
    			Method tempMethod = tempClass.getMethod("exec");
    			tempMethod.invoke(tempClass.getConstructor().newInstance());
    		}
    		
    		sc.close();
    	}
    	
    	/** 类加载器 */
    	private static TestCompiler cl = new TestCompiler();
    	
    	/**
    	 * 将语句转换成Java文件并编译
    	 * @param code 语句
    	 * @return 编译后的class文件的字节码
    	 */
    	private static byte[] compiler(String code) {
    		// 源文件输入输出流
    		FileOutputStream output = null;
    		FileInputStream input = null;
    		
    		try {
    			output = new FileOutputStream("./Temp.java");
    			output.write(("public class Temp { public void exec() {" + code + "} }").getBytes());
    			
    			JavaCompiler c = ToolProvider.getSystemJavaCompiler();
    			if (c.run(null, null, null, "./Temp.java") == 0) {
    				input = new FileInputStream("./Temp.class");
    				// readAllByte 可以读取此文件所有字节,1.9版本以上才支持
    				return input.readAllBytes();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				if (input != null) input.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			} finally {
    				try {
    					if (output != null) output.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    		
    		return null;
    	}
    
    }
    

    执行后,我的需求就达到了

     

    展开全文
  • Eclipse不编译java文件时的解决方式。
  • 用命令行编译java文件

    千次阅读 2017-06-10 16:30:37
    用惯了IDE,突然发现对于java和javac命令只会基础的单文件编译运行,因此特地研究了一下多文件依赖编译运行。(顺便一提,stackoverflow真是个好地方) 单文件编译 带包名的java编译 现在我们对 HelloWorld.java ...

    用惯了IDE,突然发现对于javajavac命令只会基础的单文件编译运行,因此特地研究了一下多文件依赖编译运行。(顺便一提,stackoverflow真是个好地方)

    环境:Java8 Windows10

    单文件编译

    带包名的java类编译

    现在我们对 HelloWorld.java 做些小小的修改代码如下

    package lib;
    
    public class HelloWorld
    {
    	public static void main (String []args) {
    		System.out.println ("Hello World!");
    	}
    }

    这种情况,有两种方式:

    第一种就是直接用 -d 参数编译。

    编译命令  javac -d . HelloWorld.java  切记  .  代表当前目录左右空格不能丢。编译后编译器会帮我们在当前目录下自动生成一个lib文件夹,这和我们的包名一致。如果包名很长如: com.shark.test 编译器就会生成 ./com/shark/test 三级目录,在最里层即 test目录下就是我们的class文件。

    运行命令 java lib.HelloWorld 运行时需带上完整包名+类名


    第二种方式是手动创建一个 lib 文件夹将 HelloWorld.java 放进去,(这里的lib 取决于包名,若多层包名需创建多级目录)

    编译命令:javac ./lib/HelloWorld.java 运行命令为:java lib.HelloWorld



    引用第三方jar包的编译

    在这里我引用的是mysql的jar包。代码如下

    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import com.mysql.jdbc.Driver;
    
    public class Test
    {
    	private ResultSet rset;
    	private static Driver driver;
    
    	public static void main (String args [] )	 throws SQLException 
    	{
    		driver  = new Driver();
    		System.out.println ("HelloWorld!!");
    		System.out.println (driver);
    	}
    }

    编译命令   javac -cp mysql-connector-java-5.1.7-bin.jar Test.java   

    执行命令  java -Djava.ext.dirs=./ Test    或是   java -cp .;mysql-connector-java-5.1.7-bin.jar Test


    有包名:

    编译命令 : javac -d . -cp mysql-connector-java-5.1.7-bin.jar Test.java   

    执行命令  java -Djava.ext.dirs=./ Test   

    -cp 指定第三方jar包的位置


    多文件编译

    同级目录下


    一下是准备工作,在当前目录下创建 HelloWorld.java 和 Main.java文件内容分别如下

    public class HelloWorld
    {
    	public String getMsg ()
    	{
    		return "HelloWorld!";
    	}
    }

    public class Main 
    {
    	public static void main (String []args)
    	{
    		HelloWorld hw = new HelloWorld ();
    		System.out.println (hw.getMsg ());
    	}
    }
    在cmd中查看目录如下:

    同级目录下java和javac都可以自动识别,这里很简单,编译命令为   javac HelloWorld.java Main.java 运行命令为  java Main



    非同级目录

    当前目录下 Main.java

    import lib.HelloWorld;
    
    public class Main 
    {
    	public static void main (String []args)
    	{
    		HelloWorld hw = new HelloWorld ();
    		System.out.println (hw.getMsg ());
    	}
    }

    在当前目录下创建一个目录lib 并在lib下创建一个文件 HelloWorld.java

    package lib;
    
    public class HelloWorld
    {
    	public String getMsg ()
    	{
    		return "Hello World!";
    	}
    }
    编译命令   javac Main.java ./lib/HelloWorld.java 运行命令为 java Main



    多谢stackoverflow的大佬,下面附上相关链接 
    https://stackoverflow.com/questions/13738343/import-class-file-in-java?rq=1
    https://stackoverflow.com/questions/44458126/use-javac-and-java-to-excute-class-file-with-extern-classes-under-other-director



    展开全文
  • 两个测试所需文件 public class Hello{ public void sayHello(){ System.out.println("Hello"); } } public class Demo{ public static void main(String[] args) { Hello Hello = new Hello(); Hello....

    两个测试所需文件

    public class Hello{
        public void sayHello(){
            System.out.println("Hello");
        }
    }
    
    public class Demo{
        public static void main(String[] args) {
            Hello Hello = new Hello();
            Hello.sayHello();
        }
    }
    

    同目录下javac编译执行

    $ ls
    Demo.java
    Hello.java
    
    $ javac Demo.java
    $ java Demo
    

    引入不同目录依赖编译执行

    $ ls
    Demo.java
    libs/
        Hello.java
    
    $ javac -classpath ./libs Demo.java
    $ java -classpath .:libs Demo
    

    引入jar包

    将Hello.java打成jar包

    $ cd libs
    $ javac Hello.java
    $ jar -cvf hello.jar Hello.class
    

    引入jar包执行

    $ ls 
    Demo.java
    libs/
        hello.jar
    
    $ javac -classpath ./libs/hello.jar  Demo.java
    $ java -classpath .:./libs/hello.jar  Demo
    

    优化

    $ javac -encoding UTF-8 -classpath ./libs -d classes Demo.java
    
    # 参数说明
    -encoding UTF-8    定源文件使用的字符编码
    -classpath ./libs  指定查找用户类文件和注释处理程序的位置
    -d classes         指定放置生成的类文件的位置,必须存在
    Demo.java          source files
    
    $ cd classes 
    $ java Demo
    
    展开全文
  • Java 控制台编译Java文件并调用

    千次阅读 2017-04-02 15:10:08
    内容: 演示如何使用控制台将Java文件编译成class文件,然后在控制台上调用步骤:1.首先创建一个Java文件,如下所示:public class Hello { public static void main(String[] args) { System.out.println("Hello ...
  • java反编译工具(.class文件反编译成.java文件) 解压后点击exe文件打开工具,点击open菜单选择.class文件执行后即生成.java文件 一直在使用的,方便,系统维护必不可少
  • (1) javac:作用:编译java文件;使用方法: javac Hello.java ,如果不出错的话,在与Hello.java 同一目录下会生成一个Hello.class文件,这个class文件是操作系统能够使用和运行的文件。 (2) java: 作用:运行...
  • 设置class文件的生成位置 file->project structure out put 选择第二个...编译Java文件 点击要编译的java文件(已经设置为source文件),再点击build->rebuild default(ctrl+shift+f9)进行编译 过程中出现的问题
  • Linux终端编译并执行Java文件

    千次阅读 2019-07-30 14:18:54
    条件: 配置好jdk,搭建好java环境。 shell 中操作: 1、先创建java项目目录,名称project。 mkdir project ...2、在项目中创建src和bin目录,src下用于存放 “.java文件,bin下存放 “ .class ” 文件...
  • IDEA反编译java.class文件

    千次阅读 2021-02-21 11:52:38
    找到java文件对应的class文件 在IDEA中通过右键类文件,然后点击Show in Explorer,打开java文件所在文件夹 将第一步中的class文件复制到第二步打开的文件夹中 在IDEA中即可得到图标带有“01” 且后缀为**.class**的...
  • 由于自己在学习Java JVM相关知识的时候需要将java文件编译成class文件进行性能分析,故将搜索到的方法整理如下: 步骤: 第一步:运行代码,生成.java文件 第二步:在当前路径下打开cmd窗口 在当前文件...
  • Java指令编译java文件

    千次阅读 2021-10-15 10:38:12
    Java指令编译java文件1. 进入cmd2. 编译2.1 切换不同JDK编译文件3. 运行 1. 进入cmd 如何快速进入/打开cmd–快捷键 在源代码目录输入cmd,然后回车 2. 编译 如果出现错误: 编码 GBK 的不可映射字符 (0x8D) 需要在...
  • IDEA单独javac编译某个java文件

    万次阅读 2018-07-26 16:42:26
    找到下面的terminal打命令,进入编译目标所在文件夹,执行javac命令: E:\ideaPro2\Thread&gt;cd src\com\sa\thread E:\ideaPro2\Thread\src\com\sa\thread&gt;cd 练习\练习1 E:\ideaPro2\Thread\src\...
  • 在cmd命令行编译JAVA文件报错找不到或无法加载主类 在cmd命令行编译Java文件出现编译成功但是不能运行的错误时,是由于jdk的环境变量的配置存在问题。相信同学们已经按照相关教程配置过环境变量,但是仍然达到想要的...
  • Java文件编译与反编译(一):javac命令和javap命令 1.创建一个Test.java文件,并输入内容 public class Test{ private int m; public int inc(){ return m + 1; } } 2.使用javac命令编译Test.java文件,得到...
  • 很多时候,需要用到命令行来进行Java文件编译。在用习惯了IDE 可能会不清楚如何在cmd命令行窗口进行编译,简单的都还好,带有包路径的可能会让很多人觉得有点小头疼。最近试了一下,发现了问题,就研究整理了一下...
  • 如果你已经配置好环境变量,请跳过,如果...在src文件夹下的com.company package中,有两个java文件,分别是donation_analytics.java和Main.java 在cmd中用cd命令切换路径到src文件夹下,然后输入javac com/comp...
  • Java快速编译工具

    2018-10-03 21:32:38
    优点:本程序不需要用户手动敲击CMD命令,只需在图形界面上用鼠标点击即可方便地编译Java源程序,并可自定义class文件的存储位置。同时,在用户点击编译、运行等按钮时,会自动生成相应的CMD命令并通过对话框显示...
  • (原因:没有指名编码风格)javac命令中文乱码问题解决今天在做web socket通信的时候需要将两个java文件同时跑起来,使用命令行编译java文件时出现javac编译java文件成class文件出现中文乱码问题,如下图: ...
  • Java 如何编译 Java 文件

    千次阅读 2016-12-10 10:18:28
    本文我们演示如何编译 HelloWorld.java 文件,其中 Java 代码如下:public class HelloWorld { public static void main(String ...接下来我们使用 javac 命令编译 Java 文件,并使用 java 命令执行编译文件: ...
  • 在linux命令行中编译和运行java文件

    万次阅读 2016-03-03 22:46:41
    同时加载编译多个jar包和java文件在个人平常使用或者当我们把代码部署到linux服务器上的时候,我们经常需要通过命令行编译和运行java文件,网上关于这个的方法大多是通过javac -cp filePath/jarName.jar javaName....
  • 如何用cmd命令行编译运行Java文件

    千次阅读 2019-10-13 02:54:25
    在windows下利用cmd命令行,可以调用jdk里的javac.exe和java.exe,从而对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量。下面,我们一起学习如何用cmd命令行编译运行一个Java程序。 1.在...
  • jdk编译.java文件生成.class文件

    千次阅读 2019-06-17 16:59:12
    首先请确保你的jdk是可用的 已命令行的形式进入到jdk的bin目录下 然后用javac命令进行编辑你要编辑的.java文件 在之后会生成相应的.class文件
  • Makefile编译Java文件

    千次阅读 2017-03-08 09:15:55
    下面是在Linux下用Makefile编译java文件简单示例,仅供参考 先简单说明下javac命令的简单用法: javac的通常用法: javac options:命令行选项;  sourcefiles:一个或多个要编译的源文件;  @files:一个...
  • Class文件 反编译Java文件

    千次阅读 2019-04-24 09:28:20
    准备 首先得先安装了JDK,并且配置了环境变量。 然后去jdk目录下的bin文件夹中查看是否存在jad.exe。 没有的话请先下载一个jad.exe,放到上述文件夹中。 ... windows+R,输入cmd 进入... 跳转到你需要进行反编译的c...
  • 编译多个java文件

    千次阅读 2019-12-02 10:40:42
    基于怎样加Java文件编译成class文件添加一个多个java文件编译 只需在最后一步改为具体的名字改为*.java 执行命令为: Javac E:\workspaces\portal_one\JUnit_Test\src\main\java\...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 729,447
精华内容 291,778
关键字:

编译java文件命令

java 订阅