2011-02-22 102 views
0

this README我給出了一個用於測試已發佈工具的快速CL的說明。我認爲如果我提供了一個.bat和unix腳本,它通過一次點擊/命令執行命令會更好。同時,與編譯的程序不同,它是透明的,用戶可以使用編輯器打開腳本並檢查執行的命令。一個.bat腳本可以寫一個java文件並編譯它嗎?

我可以在一隻蝙蝠保存一個文件嗎? 這是我想要執行的。

$ vim Test.java (windows: notepad Test.java) 

class T { 
private static void p(int i, Double d, String... s){} 
} 

public class Test{ 

@com.dp4j.InjectReflection public void t() { 
T.p(1,new Double(2),"hello", "reflection"); 
} 
} 

$ ls Test.class T.class (windows: dir Test.class T.class) 
ls: Test.class: No such file or directory ls: T.class: No such file or directory 

$ javac -cp dp4j-1.0-jar-with-dependencies.jar Test.java 
$ ls Test.class T.class (windows: dir Test.class T.class) 
ls Test.class T.class 

回答

0

這是一個unix可執行的腳本,它可以做我想做的事情。我不知道這是否與cygwin的適用於Windows:

#!/bin/sh 

v=1.1 
test_file="Test10.java" 
jar_file="dp4j-$v-jar-with-dependencies.jar" 

cmd="curl -O --fail -L http://downloads.sourceforge.net/project/dp4j/$v/$jar_file" 
echo $cmd 
$cmd 
echo 

# Start 
cat > $test_file << __EOF__ 
class T10 { 
    private static void p(int i, Double d, String... s){} 
} 
public class Test10{ 
    @com.dp4j.InjectReflection 
    public void t() { 
    T10.p(1,new Double(2),"hello", "reflection"); 
    } 
} 
__EOF__ 
cmd="cat $test_file" 
echo $cmd 
$cmd 

echo 
cmd="javac -Averbose=true -cp $jar_file $test_file" 
echo $cmd 
$cmd 
echo 
echo "TEST PASSED: $test_file was compiled with Reflection Injected." 
echo "When JUnit/TestNG.jar is in the classpath you may use @Test in lieu of @InjectReflection." 
echo "Javadoc, sources, and other artifacts maybe downloaded from http://repo2.maven.org/maven2/com/dp4j/dp4j/"$v"/" 

這裏有一個行命令下載並執行它:

wget http://sourceforge.net/projects/dp4j/files/1.2/TESTDRIVE ; chmod +x TESTDRIVE ; ./TESTDRIVE 
1

是的。

你可以把每一行以echo命令輸送到該文件:

echo class T { > MyFile.java 
echo  private static void p(int i, Double d, String... s){} >> MyFile.java 
echo } >> MyFile.java 
echo ... >> MyFile.java 

>創建一個文件; >>追加到它。

然後,您可以正常編譯它。

+1

你甚至可以把多個'echo'es成包圍塊通過括號並只使用一次重定向。 – Joey 2011-02-23 21:42:30

1

嗯,也許這個?

// 2>NUL&GOTO :START 
//Just ignore the above line, it's for the batch script. 

class T { 
private static void p(int i, Double d, String... s){} 
} 

public class Test{ 

@com.dp4j.InjectReflection public void t() { 
T.p(1,new Double(2),"hello", "reflection"); 
} 
} 

/*We start the batch script here. 
:START 
@CLS&ECHO OFF 
START NOTEPAD %0 
IF EXIST Test.class GOTO :EXISTS 
IF EXIST T.class GOTO :EXISTS 
JAVAC -cp dp4j-1.0-jar-with-dependencies.jar %0 
GOTO :END 
:EXISTS 
ECHO There is a preexisting class file. Aborting. 
:END 
REM We end the batch script here.*/ 

順便說一下,這裏的批處理腳本和java源文件是同一個文件。

+0

我沒有設法執行此操作。 COPY CON dp4j-1.0-CLTEST.BAT ...然後執行它,javac會理解地報告這是一個無效的選項。重命名它Test.java將執行這個在記事本中打開的命名的bat,但不會編譯 – simpatico 2011-02-23 07:25:06

相關問題