2013-02-17 2 views
9

У меня есть проект Java, который построен с использованием Maven. Я хотел бы добавить опции в командную строку «javac» - в частности, я хочу передать несколько параметров «-J».Как передать опции «-J» в javac через Maven?

Так обычно я хотел бы сделать что-то вроде этого:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <compilerArgument>-J-Xdebug</compilerArgument> 
     <compilerArgument>-J-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005</compilerArgument> 
    </configuration> 
</plugin> 

Однако, когда я пытаюсь это я получаю ошибки вида:

[ERROR] Failure executing javac, but could not parse the error: 
javac: invalid flag: -J-Xdebug 
Usage: javac <options> <source files> 
use -help for a list of possible options 

При более внимательном рассмотрении оказывается, что специалист-от компилятора плагин записывает все аргументы компилятора в файл опций и вызывает javac как «javac @optionfile». Согласно официальной документации Javaс в http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/javac.html:

@argfiles Один или несколько файлов, в котором перечислены параметры и исходные файлы. Параметры -J не разрешены в этих файлах.

Так что, похоже, что опция в maven-compiler-plugin не будет работать - она ​​хочет использовать файлы arg, файлы arg не могут содержать параметры, которые я хочу.

Я также видел некоторые предложения по использованию карты вместо этого - однако это имело сходные результаты, когда я пробовал это.

Есть ли другие варианты?

+2

выглядит, как вы попали в известную проблему - http://jira.codehaus.org/browse/MCOMPILER-129 – radai

ответ

4

Плагин компилятор позволяет specify the location of the jdk, так что вы могли бы использовать что-то вроде этого:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.0</version> 
    <configuration> 
     <verbose>true</verbose> 
     <fork>true</fork> 
     <executable><!-- path-to-javac-invoking-script --></executable> 
     <compilerVersion>1.3</compilerVersion> 
    </configuration> 
    </plugin> 

и предоставить ему путь к сценарию файла/летучей мыши, который будет проходить все аргументы по реальному JAVAC вместе с вашими дополнительными аргументами?

EDIT - the original issue был зафиксирован в компиляторе плагин 2.4+, и это должно работать теперь без моего обходного

+0

Ну, я могу подтвердить, что он работает ... это, безусловно, обходное решение, но, не дожидаясь ошибок, связанных с восходящим потоком и ожидающих новой версии плагинов, это будет работать :) –

+0

@RichardDowner - вы не спрашивали для симпатичного ;-) – radai