【问题标题】:compile a java class with package name in another java class file by using javac使用 javac 在另一个 java 类文件中编译一个带有包名的 java 类
【发布时间】:2014-06-05 01:51:21
【问题描述】:

我正在尝试使用 javac 命令在另一个 java 类文件中编译一个 java 类文件。如果这两个文件没有任何包名就很好了。

上课时间

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Laj {

      private static void printLines(String name, InputStream ins) throws Exception {
        String line = null;
        BufferedReader in = new BufferedReader(
            new InputStreamReader(ins));
        while ((line = in.readLine()) != null) {
            System.out.println(name + " " + line);
        }
      }

      private static void runProcess(String command) throws Exception {
        Process pro = Runtime.getRuntime().exec(command);
        printLines(command + " stdout:", pro.getInputStream());
        printLines(command + " stderr:", pro.getErrorStream());
        pro.waitFor();
        if(pro.exitValue() != 0){
            System.out.println(command + " exitValue() " + pro.exitValue());    
        }       
      }

      public static void main(String[] args) {
        try {
          runProcess("javac simpleTest.java");
          runProcess("java simpleTest");
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }

类 SimpleTest

public class simpleTest {
    public static void main(String[] args) {
        System.out.println("What's wrong with it");
    }
}

我可以使用命令javac Laj.javajava Laj 很好地编译和运行它们。但是如果我在这两个类的前面加上包名,例如package compileTest,并将Laj中的runProcess部分代码修改为

runProcess("javac -d . compileTest.simpleTest.java");
runProcess("java compileTest.simpleTest");

代码不起作用。

谁能帮帮我,谢谢。

【问题讨论】:

  • 我没想到会这样;包是文件夹结构,您的文件不在文件夹结构中。 This question,虽然不是完全重复,但可以让您摆脱最初的痛苦。
  • 我认为您需要指定类路径。 IE。使用“-cp”。如果这不起作用,请使用 -cp 参数。

标签: java javac


【解决方案1】:

你为什么不使用'JavaCompiler'类来编译你的java文件。请看下面的例子我已经编译了一个带有包名的java类。

Package Name = com.main
Class Name = MainClass.java
Source Dir = src

public  void compileClass() {
        System.setProperty("java.home", "G:\\Java\\Tools\\installed\\JDK");   // Set JDK path it will help to get compiler
        File root = new File("/src");   // Source Directory 
        File sourceFile = new File(root, "com/main/MainClass.java");    // Java file name with package 
        sourceFile.getParentFile().mkdirs();
        try {
            new FileWriter(sourceFile).close();  // Read Java file
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        System.out.println(compiler.run(null, null, null, sourceFile.getPath()));
    }

【讨论】:

  • ...您为什么觉得有必要这样做?
  • 这是另一种选择,因为我也在第一行回答中写道。它也在做同样的事情来编译一个 java 源文件。
  • 是的,我熟悉JavaCompiler。然而,这不是问题所要问的,对这个特定问题也没有真正的帮助。
  • 所以您正在尝试将其作为编译 java 文件的第二种方法。我以为你坚持编译 java 文件,所以建议了替代解决方案。我很抱歉:)
猜你喜欢
  • 1970-01-01
  • 2011-12-23
  • 2012-04-14
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
相关资源
最近更新 更多