كيفية تمرير SystemProperties عند استدعاء Exec: Java Plugin في Maven؟

StackOverflow https://stackoverflow.com/questions/3708846

  •  02-10-2019
  •  | 
  •  

سؤال

أريد استخدام المكون الإضافي exec: java لاستدعاء الفصل الرئيسي من سطر الأوامر. يمكنني تمرير وسيط من سطر الأوامر باستخدام -Dexec.args="arg0 arg1 arg2", ، لا أعرف كيفية تمرير خصائص النظام. لقد جربت '-dexec.systemproperties = "key = value" `ولكن دون أي تأثير.

pom.xml يشبه هذا:

  <plugin>  
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <configuration>
      <mainClass>ibis.structure.Structure</mainClass>
    </configuration>  
  </plugin>
هل كانت مفيدة؟

المحلول

لا توجد طريقة لتعيين ملف <systemProperties> معامل على سطر الأوامر.

لكن منذ exec:java ليس متشعبًا ، يمكنك فقط تمرير خاصية النظام إلى Maven وسيتم التقاطها بواسطة exec:java كذلك.

mvn -Dkey=value exec:java -Dexec.mainClass=com.yourcompany.yourclass \
    -Dexec.args="arg1 arg2 arg3"

نصائح أخرى

حاول المتابعة بالنسبة لي ، فهو يعمل بشكل صحيح

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <configuration>
                <mainClass>ibis.structure.Structure</mainClass>
                <systemProperties>
                    <systemProperty>
                        <key>someKey</key>
                        <value>someValue</value>
                    </systemProperty>
                </systemProperties>
            </configuration>
        </plugin>

لقد واجهت مشكلة مماثلة وأردت كتابة إجابة كاملة للآخرين قد تصادف هذا السؤال.

على الرغم من أن السؤال لا يدور حول pom.xml ولكن حول سطر الأوامر - فإنه لا يوضح كيفية فعل الشيء نفسه مع pom.xml لذلك هنا هو

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>

                <goals>
                    <goal>java</goal>
                </goals>

                <configuration>
                     <mainClass>myPackage.MyMain</mainClass>
                      <systemProperties>
                          <property>
                              <key>myKey</key>
                              <value>myValue</value>
                          </property>
                      </systemProperties>
                </configuration>

            </plugin>
        </plugins>
    </build>

لخط الأوامر - أعتقد Sean Patrick Floyd's الإجابة جيدة - ومع ذلك ، إذا كان لديك شيء محدد بالفعل في pom.xml الخاص بك ، فسيتجاوزه.

حتى الجري

 mvn exec:java -DmyKey=myValue

يجب أن تعمل أيضًا من أجلك.

يجب أن تلاحظ أيضًا أن ال وثائق exec plugin ينص على ما يلي

A list of system properties to be passed. 
Note: as the execution is not forked, some system properties required 
by the JVM cannot be passed here. 
Use MAVEN_OPTS or the exec:exec instead. See the user guide for more information.

لذلك يمكنك أيضًا فعل شيء كهذا

export MAVEN_OPTS=-DmyKey=myValue
mvn exec:java

ويجب أن تعمل بنفس الطريقة.

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