Testing .bat脚本可以编写java文件并编译它吗?

Testing .bat脚本可以编写java文件并编译它吗?,testing,scripting,batch-file,Testing,Scripting,Batch File,在中,我给出了测试发布工具的快速CL的说明。我认为如果我提供了一个.bat和unix脚本,它可以在一次单击/command中执行命令,那会更好。同时,与编译程序不同,它是透明的,用户可以用编辑器打开脚本并检查执行的命令 我可以在bat中保存文件吗? 这就是我想要它执行的 $ vim Test.java (windows: notepad Test.java) class T { private static void p(int i, Double d, String... s){} }

在中,我给出了测试发布工具的快速CL的说明。我认为如果我提供了一个.bat和unix脚本,它可以在一次单击/command中执行命令,那会更好。同时,与编译程序不同,它是透明的,用户可以用编辑器打开脚本并检查执行的命令

我可以在bat中保存文件吗? 这就是我想要它执行的

$ 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 

您可以将每一行放入通过管道传输到文件的
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
创建一个文件<代码>>>附加到它

然后你就可以正常编译了。

嗯,也许是这个

// 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源代码是同一个文件。

这是一个unix可执行脚本,可以实现我想要的功能。我不知道它在windows上是否与cygwin兼容:

#!/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"/"

我没能做到这一点。复制CON dp4j-1.0-CLTEST.BAT。。。然后执行它,javac将报告这是一个无效选项,这是可以理解的。重命名它Test.java将在记事本中打开这个命名精巧的bat,但不会发生编译。您甚至可以将多个
echo
放在一个由括号包围的块中,并且只使用一个重定向。
wget http://sourceforge.net/projects/dp4j/files/1.2/TESTDRIVE ;  chmod +x TESTDRIVE ; ./TESTDRIVE