Pom.xml এ বৈশিষ্ট্য হিসাবে মাভেনের কাছ থেকে কমান্ড লাইন আর্গুমেন্টগুলি পাস করা


100

কমান্ড লাইন থেকে pom.xmlফাইলের বৈশিষ্ট্যগুলিতে যুক্তিগুলি দেওয়া কি সম্ভব ? উদাহরণস্বরূপ আমি চালানmvn ... argument

এবং pom.xML এ

<properties>
   <myproperty> here should add argument from command line</myproperty>
</properties>

সাহায্যের জন্য ধন্যবাদ।


আপনি যা চাইছেন তা সরাসরি নয় তবে মভেন প্রোফাইলগুলি এর জন্য কার্যকর হতে পারে
সিপ

হ্যাঁ আমি প্রোফাইল সম্পর্কে জানি। আমি মাভেন-সাপুই-প্লাগইন ব্যবহার করছি যেখানে <প্রকল্প> ফাইলের মধ্যে ... </ প্রকল্প> ফাইলটি প্রকল্পের নাম সংজ্ঞায়িত। আমার প্রায় 10 টি প্রকল্প রয়েছে এবং আমি প্রতিটি প্রকল্পের নতুন প্রোফাইলের জন্য চাই না। আমি এমভিএন চালানোর জন্য যুক্তি ব্যবহার করতে চাই ... প্রজেক্ট 1 চালাতে প্রকল্প এবং এমভিএন ... প্রকল্প 2 চালাতে প্রকল্প
হুদি

উত্তর:


134

আপনার সম্পত্তির উদাহরণ হিসাবে করুন:

mvn install "-Dmyproperty=my property from command line"

পুরো সম্পত্তির সংজ্ঞা সম্পর্কে নোটগুলি দেখুন। আপনার সম্পত্তিতে স্পেস থাকলে আপনার সেগুলির প্রয়োজন হবে।


19
আরও মনে রাখবেন, পোম এবং কমান্ড-লাইনে আপনার দুটি সম্পত্তি থাকলে কমান্ড-লাইন অগ্রাধিকার নেয়। ওভাররিডেবল ডিফল্ট প্রদানের জন্য এটি কার্যকর হতে পারে।
ড্যান কার্টার

4
আমরা এর মতো একাধিক যুক্তিও পাস করতে পারি, এরকম কিছু:mvn clean install "-Dprop1=value1" "-Dprop2=value2"
সুমিত

15

এটি সমাধানের জন্য আমি বৈশিষ্ট্যগুলি প্লাগইন ব্যবহার করেছি।

বৈশিষ্ট্যগুলি পোমে সংজ্ঞায়িত করা হয় এবং একটি my.properties ফাইলে লিখিত হয়, যেখানে সেগুলি পরে আপনার জাভা কোড থেকে অ্যাক্সেস করা যায়।

আমার ক্ষেত্রে এটি টেস্ট কোড যা এই বৈশিষ্ট্য ফাইলটি অ্যাক্সেস করতে হবে, তাই পমটিতে বৈশিষ্ট্য ফাইলটি মাভেনের টেস্টআউটপুট ডিরেক্টরিতে লেখা হয়:

<configuration>
    <outputFile>${project.build.testOutputDirectory}/my.properties</outputFile>
</configuration>

আপনি যদি অ্যাপ্লিকেশন কোড দ্বারা বৈশিষ্ট্যগুলি অ্যাক্সেসযোগ্য হতে চান তবে আউটপুট ডিরেক্টরি ব্যবহার করুন:

<configuration>
    <outputFile>${project.build.outputDirectory}/my.properties</outputFile>
</configuration>

যারা পরিপূর্ণ উদাহরণ খুঁজছেন তাদের জন্য (এই কাজটি করতে আমার কিছুটা ম্লান লাগল কারণ সম্পত্তি ট্যাগগুলির নামকরণ কীভাবে পম ফাইলের অন্য কোথা থেকে তাদের পুনরুদ্ধার করার ক্ষমতাকে প্রভাবিত করে), আমার পোমটিকে নিম্নরূপ দেখায়:

<dependencies>
     <dependency>
      ...
     </dependency>
</dependencies>

<properties>
    <app.env>${app.env}</app.env>
    <app.port>${app.port}</app.port>
    <app.domain>${app.domain}</app.domain>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.20</version>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0.0</version>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>write-project-properties</goal>
                    </goals>
                    <configuration>
                        <outputFile>${project.build.testOutputDirectory}/my.properties</outputFile>
                    </configuration>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>

এবং কমান্ড লাইনে:

mvn clean test -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901

সুতরাং এই বৈশিষ্ট্যগুলি জাভা কোড থেকে অ্যাক্সেস করা যেতে পারে:

 java.io.InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("my.properties");
 java.util.Properties properties = new Properties();
 properties.load(inputStream);
 appPort = properties.getProperty("app.port");
 appDomain = properties.getProperty("app.domain");

জাভাতে থাকা আমার সম্পত্তি ফাইলটি $। App.env as হিসাবে একই মান দিচ্ছে এটি maven কমান্ড লাইন থেকে এটি তুলছে না, সম্পত্তিটির নামটি কি এই জাতীয় মানের সমান হতে হবে? <app.env> $ {app.env} </ app.env>
Sujith

14

Pom.xML এর ভিতরে

<project>

.....

<profiles>
    <profile>
        <id>linux64</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <build_os>linux</build_os>
            <build_ws>gtk</build_ws>
            <build_arch>x86_64</build_arch>
        </properties>
    </profile>

    <profile>
        <id>win64</id>
        <activation>
            <property>
                <name>env</name>
                <value>win64</value>
            </property>
        </activation>
        <properties>
            <build_os>win32</build_os>
            <build_ws>win32</build_ws>
            <build_arch>x86_64</build_arch>
        </properties>
    </profile>
</profiles>

.....

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>target-platform-configuration</artifactId>
    <version>${tycho.version}</version>
    <configuration>
        <environments>
            <environment>
                <os>${build_os}</os>
                <ws>${build_ws}</ws>
                <arch>${build_arch}</arch>
            </environment>
        </environments>
    </configuration>
</plugin>

.....

এই উদাহরণে আপনি যখন কোনও যুক্তি ছাড়াই পোম চালান তখন mvn clean installডিফল্ট প্রোফাইলটি কার্যকর করা হবে।

সাথে মৃত্যুদণ্ড কার্যকর করা হয় যখন mvn -Denv=win64 clean install

win64 প্রোফাইল কার্যকর করা হবে।

দয়া করে http://maven.apache.org/guides/intr پيداوار/intr Productions- to-profiles.html দেখুন


কোন প্রোফাইল ব্যবহার করার পরে, এটি এমভিএন ক্লিন-পুইন 64 করা উচিত?
সেন্ডন 1982

6

আপনি প্রকল্প ফাইল হিসাবে পরিবর্তনশীল নাম দিতে পারেন। উদাহরণস্বরূপ আপনি প্লাগইন কনফিগারেশন নীচের হিসাবে শুধুমাত্র একটি ট্যাগ দিতে: -

<projectFile>${projectName}</projectFile>

তারপরে কমান্ড লাইনে আপনি প্রকল্পের নামটি প্যারামিটার হিসাবে পাস করতে পারেন: -

mvn [your-command] -DprojectName=[name of project]

আমি এমভিএন কমান্ডে ব্রাউজারের নাম এবং পরিবেশ সরবরাহ করতে চাই। যদি আমি সরবরাহ না করি তবে এটি ডিফল্ট চয়ন করবে। কিভাবে যে কি?
পল

1
mvn clean package -DpropEnv=PROD

তারপরে POM.xML এ এটি ব্যবহার করে

<properties>
    <myproperty>${propEnv}</myproperty>
</properties>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.