Может ли скрипт .bat написать файл Java и скомпилировать его? - PullRequest
0 голосов
/ 23 февраля 2011

В этом README Я даю инструкции для быстрого CL для тестирования выпущенного инструмента.Я думаю, что было бы намного лучше, если бы я предоставил скрипт .bat и unix, который выполнял команды одним щелчком / командой.В то же время, в отличие от скомпилированной программы, она прозрачна, и пользователи могут открывать сценарий в редакторе и проверять выполненные команды.

Можно ли сохранить файл в летучей мыши?Это то, что я хотел бы выполнить.

$ 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 

Ответы [ 3 ]

1 голос
/ 23 февраля 2011

Гм, может быть, это?

// 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 - это один и тот же файл.

1 голос
/ 23 февраля 2011

Да.

Вы можете поместить каждую строку в команду 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

> создает файл;>> добавляет к нему.

Затем вы можете скомпилировать его как обычно.

0 голосов
/ 11 декабря 2011

Это скрипт Unix Exableable, который делает то, что я хочу. Я не знаю, работает ли он с 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
...