Frage

in meinem pom Ich habe die exec-maven-Plugin hinzugefügt, um eine Java-Klasse aufrufen, die eine Datei generieren. Diese Klasse erfordert einige Parameter an die Haupt Methode übergeben werden soll, einer von denen ist, die Position einer Eingabedatei (außerhalb des Projekts). Bis jetzt habe ich einen relativen Pfad für diese wurde verwendet, die funktioniert:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>test</phase>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.laco.projectmaster.util.LanguageGenerator</mainClass>
                <arguments>
                    <argument>../PM-Config/dev/PMLanguage.xls</argument>
                    <argument>PM4.0</argument>
                    <argument>${project.build.outputDirectory}/com/laco/projectmaster/props/resources</argument>
                    <argument>ProjectMaster</argument>
                    <argument>Created during maven build (POM Version: ${pom.version})</argument>
                </arguments>
            </configuration>
        </plugin>

Jetzt fange ich hudson zu verwenden, um / Paket zu installieren und die Kriege einzusetzen und ich kann diesen relativen Pfad nicht mehr verwenden. Einfach Ich dachte, ich gehe nur die Position der Eingabedatei, wenn das Hervorrufen maven wie:

MVN sauber Paket -Dlangdir = C: / somedir

und ändern Sie dann die pom wie:

<argument>${langdir}/PMLanguage.xls</argument>

Allerdings ist dieser Parameter einfach wird hier ignoriert. Der Weg der Hauptklasse als Argument erhält wird null / PMLanguage.xls . Der Parameter selbst ist in Maven verfügbar, I mit Erfolg getestet ein Echo in dem antrun Plugin. Der richtige Pfad hallte wurde.

Sind die paremeters an Sie weitergeben maven dann nicht standardmäßig verfügbar, egal wo Sie sie in der pom verweisen?

Dank für jede Hilfe,
Stijn

War es hilfreich?

Lösung

Ich kann nicht das Problem reproduzieren. Früher habe ich die folgende Testklasse:

package com.stackoverflow.q3421918;

public class Hello
{
    public static void main( String[] args )
    {
        System.out.println( args[0] + " " + args[1] );
    }
}

Und die folgende pom.xml:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.stackoverflow.q3421918</groupId>
  <artifactId>Q3421918</artifactId>
  <version>1.0-SNAPSHOT</version>

  <!-- this was a test for a workaround -->
  <properties>
    <myprop>${langdir}</myprop>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2</version>
        <executions>
          <execution>
            <phase>test</phase>
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <mainClass>com.stackoverflow.q3421918.Hello</mainClass>
          <arguments>
            <argument>${myprop}</argument>
            <argument>${langdir}</argument>
          </arguments>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Und hier ist die Ausgabe erhalte ich:

$ mvn clean package -Dlangdir=C:/somedir 
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Q3421918
[INFO]    task-segment: [clean, package]
[INFO] ------------------------------------------------------------------------
...
[INFO] Preparing exec:java
[WARNING] Removing: java from forked lifecycle, to prevent recursive invocation.
[INFO] No goals needed for project - skipping
[INFO] [exec:java {execution: default}]
Hello c:/somedir c:/somedir
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
...

Getestet mit Maven 2.2.1.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top