5

Chcę, aby moja kompilacja Mavena zawiodła, gdy zapomniałem zadeklarować serialVersionUID w klasie Serializable. Z javac, to proste:Jak przekazać javac wiele argumentów wiersza polecenia, z których niektóre zawierają dwukropek, bez łamania plugin wydania Maven?

$ javac -Xlint:serial -Werror Source.java 

Bezpośrednio tłumacząc, że do Maven nie działa:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <configuration> 
       <compilerArgument>-Xlint:serial -Werror</compilerArgument> 
      </configuration> 
     </plugin> 

The compilerArgument jest cytowany, tak javac otrzymuje tylko jeden argument, zawierające -Xlint:serial -Werror zamiast -Xlint:serial i -Werror jako oddzielne argumenty. Więc czytać dokumenty i znaleźć compilerArguments:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <configuration> 
       <compilerArguments> 
        <Xlint:serial /> 
        <Werror /> 
       </compilerArguments> 
      </configuration> 
     </plugin> 

To wygląda dziwnie - dwukropek sprawia serial element w Xlint nazw, które nie są zgłaszane w dowolnym miejscu - ale to działa ... aż chce się zrobić prasowa:

$ mvn release:prepare

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project my-project: Error reading POM: Error on line 58: The prefix "Xlint" for element "Xlint:serial" is not bound.

Najwyraźniej zwykły czytnik POM obsługuje przestrzenie nazw XML w inny sposób niż ten użyty przez wtyczkę wydania.

W jaki sposób mogę przekazać javac wielu przełączników wiersza polecenia, gdy niektóre z tych przełączników zawierają znaki, które nie są poprawne dla zwykłych elementów XML, bez zerwania wtyczki wydania?

Odpowiedz

1

Wygląda na to, że podczas gdy spacje są ujęte w compilerArgument, to samo nie dotyczy cytatów. Tak więc, jeśli otaczają przestrzenie w argumencie z cytatami, masz dwa argumenty:

<compilerArgument>-Xlint:serial" "-Werror</compilerArgument> 

To wywołuje javac "-Xlint:serial" "-Werror" zamiast javac "-Xlint:serial -Werror".

W dokumentach nie ma niczego, co można znaleźć.

+1

nie działa dla maven-compiler-plugin 2.4 – yegor256

+0

To interesujące. Czy to błąd, czy zamierzona zmiana w zachowaniu? – gustafc

+0

zobacz [MCOMPILER-62] (http://jira.codehaus.org/browse/MCOMPILER-62) – yegor256

5

Zobacz http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#compilerArgs

i http://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html

Maven 3.1 lub nowszej

     <source>1.6</source> 
         <target>1.6</target> 
         <showDeprecation>true</showDeprecation> 
         <showWarnings>true</showWarnings> 
         </processors> 
         <compilerArgs> 
          <arg>-verbose</arg> 
          <arg>-Aeclipselink.persistencexml=src/main/resources/META-INF/persistence.xml</arg> 
         </compilerArgs> 

lub Maven 3.0 lub starszy

 <compilerArguments> 
     <verbose /> 
     </compilerArguments> 
     <compilerArgument>-Aeclipselink.persistencexml=src/main/resources/META-INF/persistence.xml</compilerArgument> 
+0

KompilatorArgs będzie niedostępny do wersji 3.1 – Tony

+0

a) wyszedł 2 lata temu b) Mam sekcję "lub" –

0

W odniesieniu do Kalpesh Soni's answer:

Uwaga dla Maven 3.1 lub później, według przykładu z http://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html:

<compilerArgs> 
    <arg>-verbose</arg> 
    <arg>-Xlint:all,-options,-path</arg> 
</compilerArgs> 

Powyższe jest wielki, chyba że chcesz przekazać dodatkowe param wymagającego znak spacji. W moim przypadku było to -bootclasspath /path/to/custom/rt.jar. W takim przypadku trzeba podzielić ten ciąg na każdej przestrzeni i przejść każdą część jako nowy <arg /> aby nie dostać Fatal error compiling: invalid flag: ... więc przykładem pracy jest:

<compilerArgs> 
    <arg>-verbose</arg> 
    <arg>-Xlint:all,-options,-path</arg> 
    <arg>-bootclasspath</arg><arg>/path/to/custom/rt.jar</arg> 
</compilerArgs> 
Powiązane problemy