2014-01-08 68 views
0

我正在使用JavaCompiler編譯類。我有jar依賴項,我曾經在類路徑中給它,我有一個類(class1)文件直接相同,這是另一個類(class2)的依賴關係。具有相關類的Java編譯器

只需

Class1.class Class2.java

我想要編譯Class2.java,在Class2中有像

Class1.sayHi(); 

代碼當我編譯它說

error: cannot find symbol 

如何在編譯Class2時包含Class1.class

我的編譯器代碼

String fileToCompile = classFile; 
System.setProperty("java.home", RuntimeCompiler.getJDKPath()); 
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); 
Iterable<? extends JavaFileObject> compilationSource = 
    fileManager.getJavaFileObjects(fileToCompile); 
List<String> optionList = new ArrayList<String>(); 
optionList.addAll(Arrays.asList("-classpath",dynamicClassPath)); 
try{ 
    compiler.getTask(null, null, null, optionList, null, compilationSource).call(); 
    return true; 
}catch (Exception e) { 
    return false; 
} 
+0

Classpath中的文件是否是Class1?僅僅因爲該文件中的代碼調用編譯並不意味着它被編譯器識別。 – 11684

+0

不,如何在類路徑中包含Class1?我不知道要包含一個類文件。我給了像如下 C:/work/sample1/core/com/ExternalResoruceExcel.class –

回答

0

特定編譯的類的類路徑可以作爲

-classpath "full_folder_Path_Till_Package" 

例:

dynamicClassPath = "C:/work/sample1/core" 
在覈心目錄你將有依賴的類內包文件夾「COM」

0

您可以在類路徑上指定多個文件/類。根據你的平臺,用冒號或分號分隔它們。

您是否驗證過它將使用javac命令進行編譯?如果這有效,那麼它必須是你的程序中的某些東西,而不是類路徑。

+0

你可以告訴如何給類路徑中的Class1.class引用? –

+0

當調用javac時,你只需指定cp = Class1.class –