سؤال

في بلدي POM لقد أضفت exec-maven-plugin للاتصال بفئة Java التي ستنشئ ملفًا. تتطلب هذه الفئة نقل بعض المعلمات إلى الطريقة الرئيسية ، أحدها هو موقع ملف الإدخال (خارج المشروع). حتى الآن ، كنت أستخدم مسارًا نسبيًا لهذا العمل بشكل جيد:

        <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>

الآن بدأت في استخدام Hudson لتثبيت/حزمة ونشر الحروب ولا يمكنني استخدام هذا المسار النسبي لفترة أطول. اعتقدت بسيطة ، أنا فقط اجتياز موقع ملف الإدخال عند استدعاء Maven مثل:

MVN Clean Package -Dlangdir = C:/يومًا ما

ثم قم بتغيير بوم مثل:

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

ومع ذلك ، يتم تجاهل هذه المعلمة ببساطة هنا. المسار الذي يتلقاه الفئة الرئيسية كحجة تصبح null/pmlanguage.xls . المعلمة نفسها متوفرة في Maven ، لقد اختبرت مع نجاح باستخدام صدى في البرنامج المساعد Antrun. وردد المسار الصحيح.

هل الباريميون الذين تنتقلون إلى Maven ثم غير متاحين افتراضيًا بغض النظر عن المكان الذي تشير إليه في POM؟

شكرا على اي مساعدة،
stijn

هل كانت مفيدة؟

المحلول

لا يمكنني إعادة إنتاج القضية. لقد استخدمت فئة الاختبار التالية:

package com.stackoverflow.q3421918;

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

و 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>

وهنا هو الإخراج الذي أحصل عليه:

$ 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] ------------------------------------------------------------------------
...

تم اختباره مع Maven 2.2.1.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top