মাভেন 2 সম্পত্তি যা পিতামাতার ডিরেক্টরি নির্দেশ করে


105

আমার মতো একটি মাল্টি-মডিউল প্রকল্প রয়েছে:

main-project/
    module1/
    module2/
        sub-module1/
        sub-module2/
        sub-module3/
        ...
    module3/
    module4/
    ...

আমাকে ম্যাভেন 2 এ বৈশিষ্ট্যগুলির একটি সেট (এটি পরিবেশের উপর নির্ভরশীল যার উপর আমি আমার প্রকল্পটি প্রকাশ করতে চাই) সংজ্ঞায়িত করতে হবে। আমি ব্যবহার করব না<properties>প্রচুর সম্পত্তি থাকায় আমি ব্যবহার ... এইভাবে, আমি বৈশিষ্ট্যগুলি মাভেন 2 প্লাগইন ব্যবহার করি ।

বৈশিষ্ট্য ফাইলগুলি মধ্যে অবস্থিত main-project/ ডিরেক্টরিতে । বৈশিষ্ট্য ফাইলটি কোথায় খুঁজে পাওয়া যায় এমন কোনও শিশুকে নির্দিষ্ট করার জন্য, আমি কীভাবে মূল pom.xML এ সঠিক ডিরেক্টরি সেট করতে পারি?

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-1</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>read-project-properties</goal>
            </goals>
            <configuration>
                <files>
                    <file>???/env_${env}.properties</file>
                </files>
            </configuration>
        </execution>
    </executions>
</plugin>

আমি যদি কেবল সেট করে রাখি <file>env_${env}.properties</file>, তারপরে যখন মাভেন 2 প্রথম মডিউলটি সংকলন করবে, এটি main-project/env_dev.propertiesফাইলটি খুঁজে পাবে না । যদি আমি সেট করে রাখি <file>../env_${env}.properties</file>, তবে পিতামাতার স্তরে বা কোনও উপ-মডিউল স্তরে একটি ত্রুটি উত্থাপিত হবে ...


1
স্রেফ ব্যবহার করুন${maven.multiModuleProjectDirectory}
কুইমন

উত্তর:


164

মূল প্রকল্প ডিরেক্টরিটি খুঁজতে প্রতিটি পমটিতে একটি সম্পত্তি সেট করার চেষ্টা করুন।

পিতামাতায়:

<properties>
    <main.basedir>${project.basedir}</main.basedir>
</properties>

বাচ্চাদের মধ্যে:

<properties>
    <main.basedir>${project.parent.basedir}</main.basedir>
</properties>

নাতি নাতনিদের মধ্যে:

<properties>
    <main.basedir>${project.parent.parent.basedir}</main.basedir>
</properties>

19
এই প্রাক সেট সেট মুছে ফেলা হয়েছে? ${parent.basedir}.4.০.৪ ... এ আর কোনও কিছুর পার্স করবেন না ...
matt5784

7
হ্যাঁ, এটি কাজ করে না। {। प्रोजेक्ट.পিয়েন্ট.বেসাদির} মূল্য বাতিল করে দেয়।
জেরেড

22
আমি এর সাথে সাফল্য পেয়েছি ${project.basedir}/..তবে এটি কেবলমাত্র একাধিক-মডিউল প্রকল্পগুলিতে কাজ করে যা একটি কঠোর ডিরেক্টরি শ্রেণিবদ্ধ।
জোনাথন

90
দীর্ঘশ্বাস. অবিশ্বাস্য, ম্যাভেন এটিকে এত কঠিন করে তোলে।
স্টিফান হ্যাবারেল

5
উপরের জোনাথনের মতো আমাকে আপেক্ষিক পাথ ব্যবহার করতে হবে তবে file.separatorভেরিয়েবলটি <main.basedir>${project.basedir}${file.separator}..</main.basedir>
এভাবে

29

কমপক্ষে বর্তমান মেভেন সংস্করণে (3.6.0) আপনি এটি ব্যবহার করতে পারেন ${maven.multiModuleProjectDirectory}


2
এটি সম্পর্কে ডকটি সন্ধান করার চেষ্টা করা হয়েছে এবং মনে হচ্ছে এটি অভ্যন্তরীণ ব্যবহার হিসাবে নির্মিত হয়েছে, ভবিষ্যতে এমএনজি -6589
গ্রেগ ডোমজান ২

কিভাবে এটি ব্যবহার করবেন? -1
এই_আপনি

এটি একটি সম্পত্তি, আপনি অন্যের সাথে যেমন ব্যবহার করতে পারেন তেমন ব্যবহার করতে পারেন।
কুনোমান

আমি নিশ্চিত না যে আমাদের এই উত্তরটি ব্যবহার করা উচিত। এই টিকিট অনুযায়ী এটি অভ্যন্তরীণ এবং যে কোনও সময় যেতে পারে। এটি কেন কোথাও নথিভুক্ত নয়। এখনও কোনও পরিষ্কার সমাধান নেই
হিলিকাস

21

ডিরেক্টরি-গোলের সাথে ডিরেক্টরি-মেভেন-প্লাগইন ব্যবহার করুন ।

অন্যান্য পরামর্শগুলির মতো নয়:

  • এই সমাধানটি বহু-মডিউল প্রকল্পগুলির জন্য কাজ করে।
  • আপনি পুরো প্রকল্পটি নির্মাণ করেন বা উপ-মডিউলটি এটি কাজ করে।
  • আপনি রুট ফোল্ডার থেকে সাব-মডিউলটি চালাচ্ছেন না তা এটি কাজ করে।
  • প্রতিটি উপ-মডিউলটিতে একটি আপেক্ষিক পাথ সম্পত্তি সেট করার দরকার নেই!

প্লাগইন আপনাকে প্রকল্পের যে কোনও মডিউলের পরম-পথে আপনার পছন্দের একটি সম্পত্তি সেট করতে দেয়। আমার ক্ষেত্রে আমি এটি রুট মডিউলটিতে সেট করেছি ... আমার প্রকল্পের রুট পোমে:

<plugin>
    <groupId>org.commonjava.maven.plugins</groupId>
    <artifactId>directory-maven-plugin</artifactId>
    <version>0.1</version>
    <executions>
        <execution>
            <id>directories</id>
            <goals>
                <goal>directory-of</goal>
            </goals>
            <phase>initialize</phase>
            <configuration>
                <property>myproject.basedir</property>
                <project>
                    <groupId>com.my.domain</groupId>
                    <artifactId>my-root-artifact</artifactId>
                </project>
            </configuration>
        </execution>
    </executions>
</plugin>

তার পর থেকে, কোনও সাব-মডিউল পমের $ {myproject.basedir always সবসময় প্রকল্পের রুট মডিউলটির পথ থাকে। এবং অবশ্যই, আপনি সম্পত্তিটি কোনও মডিউলে সেট করতে পারেন, কেবল মূলটি নয় ...


পর্বের জন্য "পরীক্ষা" রাখবেন না। আমাকে বিভিন্ন ধরণের সমস্যা সৃষ্টি করেছে। উপরোক্ত হিসাবে দুর্দান্ত কাজ করে।
ইলেক্ট্রনিক

15

আমি আমার সমস্যার সমাধান করার জন্য একটি সমাধান খুঁজে পেয়েছি: আমি গ্রোভি মাভেন প্লাগইন ব্যবহার করে সম্পত্তি ফাইলগুলি অনুসন্ধান করি।

যেহেতু আমার প্রোপার্টি ফাইলটি আবশ্যকভাবে বর্তমান ডিরেক্টরিতে, .. / অথবা ইন .. / .. তে, আমি একটি ছোট গ্রোভি কোড লিখেছি যা এই তিনটি ফোল্ডার চেক করে।

এখানে আমার pom.xML এর এক্সট্র্যাক্ট:

<!-- Use Groovy to search the location of the properties file. -->
<plugin>
    <groupId>org.codehaus.groovy.maven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.0-rc-5</version>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <source>
                    import java.io.File;
                    String p = project.properties['env-properties-file'];
                    File f = new File(p); 
                    if (!f.exists()) {
                        f = new File("../" + p);
                        if (!f.exists()) {
                            f = new File("../../" + p);
                        }
                    }
                    project.properties['env-properties-file-by-groovy'] = f.getAbsolutePath();
            </source>
            </configuration>
        </execution>
    </executions>
</plugin>
<!-- Now, I can load the properties file using the new 'env-properties-file-by-groovy' property. -->
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-1</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>read-project-properties</goal>
            </goals>
            <configuration>
                <files>
                    <file>${env-properties-file-by-groovy}</file>
                </files>
            </configuration>
        </execution>
    </executions>
</plugin>

এটি কাজ করছে, তবে আমি আসলে এটি পছন্দ করি না।

সুতরাং, আপনার যদি আরও ভাল সমাধান থাকে তবে পোস্ট করতে দ্বিধা করবেন না!


12

সুতরাং আমি যে সমস্যাটি দেখছি তা হ'ল আপনি মাভেনের কোনও পিতামাতার ডিরেক্টরিতে পরম পাথ পেতে পারেন না।

<ant> আমি এই কথাটি একটি অ্যান্টি-প্যাটার্ন হিসাবে শুনেছি , তবে প্রতিটি অ্যান্টি-প্যাটার্নের জন্য এটির জন্য বাস্তব, বৈধ ব্যবহারের কেস রয়েছে এবং আমি কেবল মাতাল হয়ে অসুস্থ হয়েছি আমি কেবল তাদের নিদর্শনগুলি অনুসরণ করতে পারি <</ গলাবাজি>

কাজেই আমার চারপাশের কাজটি ছিল আন্তরুন ব্যবহার করা। চাইল্ড pom.xML এ এটি ব্যবহার করে দেখুন:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.7</version>
    <executions>
        <execution>
            <id>getMainBaseDir</id>
            <phase>validate</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <exportAntProperties>true</exportAntProperties>
                <target>
                    <!--Adjust the location below to your directory structure -->
                    <property name="main.basedir" location="./.." />
                    <echo message="main.basedir=${main.basedir}"/>
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>

আপনি যদি চালনা করেন তবে mvn verifyআপনার এমন কিছু দেখতে পাওয়া উচিত:

main:
     [echo] main.basedir=C:\src\parent.project.dir.name

এরপরে আপনি ${main.basedir}অন্য যে কোনও প্লাগইন ইত্যাদিতে ব্যবহার করতে পারেন this


আমি কীভাবে এটি মেভেন-শিফারফায়ার-প্লাগইন এ দেব?
কল্পনা সনি

7

অন্য বিকল্প:

প্যারেন্ট পমে, ব্যবহার করুন:

<properties>
   <rootDir>${session.executionRootDirectory}</rootDir>
<properties>

শিশুদের পোমগুলিতে, আপনি এই পরিবর্তনশীলটি উল্লেখ করতে পারেন।

মূল সতর্কতা: এটি আপনাকে সর্বদা প্রধান প্যারেন্ট পম ডিরেক্টরি থেকে আদেশটি কার্যকর করতে বাধ্য করে। তারপরে আপনি যদি কিছু নির্দিষ্ট মডিউলের জন্য কমান্ডগুলি (উদাহরণস্বরূপ পরীক্ষা) চালাতে চান তবে এই বাক্য গঠনটি ব্যবহার করুন:

mvn পরীক্ষা - প্রকল্পগুলি

"প্যাথ_ টোস্টেস্ট_ডেটা" ভেরিয়েবলকে প্যারামাইটাইজ করতে শিফারফায়ারের কনফিগারেশনটি তখন হতে পারে:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${surefire.plugin.version}</version>
    <configuration>
        <systemPropertyVariables>
            <path_to_test_data>${rootDir}/../testdata</path_to_test_data>
        </systemPropertyVariables>
    </configuration>
</plugin>

5

নিম্নলিখিত ছোট প্রোফাইলটি আমার জন্য কাজ করেছিল। আমার চেকস্টাইলের জন্য এই জাতীয় কনফিগারেশন দরকার ছিল, যা আমি configপ্রকল্পের মূলের ডিরেক্টরিতে রেখেছি, তাই আমি এটি মূল মডিউল এবং সাব-মডিউলগুলি থেকে চালাতে পারি।

<profile>
    <id>root-dir</id>
    <activation>
        <file>
            <exists>${project.basedir}/../../config/checkstyle.xml</exists>
        </file>
    </activation>
    <properties>
        <project.config.path>${project.basedir}/../config</project.config.path>
    </properties>
</profile>

এটি নেস্টেড মডিউলগুলির জন্য কাজ করবে না, তবে আমি নিশ্চিত যে এটির জন্য বিভিন্ন এর বিভিন্ন প্রোফাইল ব্যবহার করে এটি পরিবর্তন করা যেতে পারে exists। (যাচাইকরণ ট্যাগটিতে "../ .." থাকা উচিত এবং ওভাররাইডেন সম্পত্তিটিতে কেবল ".." থাকা উচিত আমার কোনও ধারণা নেই, তবে এটি কেবল সেভাবেই কাজ করে))


আমি জানি না কেন এটি (অতিরিক্ত .. /) কাজ করে তবে এটিকে সবচেয়ে পরিষ্কার সমাধানের মতো মনে হয় (আমারও চেকস্টাইল.এক্সএমএল কনফিগারেশনে সমস্যা ছিল)
রকমিটহার্ডপ্লেস

5

আমার ক্ষেত্রে এটি কাজ করে:

...
<properties>
  <main_dir>${project.parent.relativePath}/..</main_dir>
</properties>
...

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-1</version>
        <executions>
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
                 <file>${main_dir}/maven_custom.properties</file>
              </files>
            </configuration>
          </execution>
        </executions>
</plugin>

3

আমি এই সমস্যাটি সমাধান করার জন্য একটি সমাধান খুঁজে পেয়েছি: $ {पालक.relativePath use ব্যবহার করুন

<parent>
    <artifactId>xxx</artifactId>
    <groupId>xxx</groupId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>..</relativePath>
</parent>
<build>
    <filters>
        <filter>${parent.relativePath}/src/main/filters/filter-${env}.properties</filter>
    </filters>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

2
এটি সর্বদা নিরাপদ নাও হতে পারে; {{প্যারেন্ট.রেলেটিভপথ কোনও ফাইলের নাম অন্তর্ভুক্ত করতে পারে, যেমন "../pom.xML"
পিমলটক

3

আপনি প্রকল্প সি তে রয়েছেন, প্রকল্প সি বি এর সাব-মডিউল এবং বি src/test/config/etcএ-র উপ-অনুচ্ছেদ is আপনি প্রকল্প সি থেকে মডিউল ডি-র ডিরেক্টরিতে পৌঁছানোর চেষ্টা করেন ডিও এ-র উপ-অনুচ্ছেদ The

-Dparameter=file:/${basedir}/../../D/src/test/config/etc

2
<plugins>
  <plugin>
    <groupId>org.codehaus.groovy.maven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.0</version>
    <executions>
      <execution>
        <phase>validate</phase>
        <goals>
          <goal>execute</goal>
        </goals>
        <configuration>
          <source>
            import java.io.File
            project.properties.parentdir = "${pom.basedir}"
            while (new File(new File(project.properties.parentdir).parent, 'pom.xml').exists()) {
                project.properties.parentdir = new File(project.properties.parentdir).parent
            }
          </source>
        </configuration>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-2</version>
    <executions>
      <execution>
        <phase>initialize</phase>
        <goals>
          <goal>read-project-properties</goal>
        </goals>
        <configuration>
          <files>
            <file>${parentdir}/build.properties</file>
          </files>
        </configuration>
      </execution>
    </executions>
  </plugin>
  ...

1

অন্য একটি প্রশ্নের উত্তরে আমি দেখিয়েছি কীভাবে ম্যাভেন-প্রপার্টি-প্লাগইনটি মাভেন নির্ভরতাগুলিতে সংজ্ঞায়িত বাহ্যিক সম্পত্তি বর্ণনাকারী ব্যবহার করতে বাড়ানো যেতে পারে।

আপনি এই ধারণাটি একাধিক বর্ণনাকারী জারগুলিতে রাখতে পারেন, প্রতিটি পরিবেশের নাম সহ আর্টিক্ট আইডির অংশ হিসাবে, এতে একটি $ {env} .properties রয়েছে। তারপরে আপনি উপযুক্ত জার এবং প্রোপার্টি ফাইল নির্বাচন করতে সম্পত্তিটি ব্যবহার করতে পারেন, উদাহরণস্বরূপ:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>properties-ext-maven-plugin</artifactId>
  <version>0.0.1</version>
  <executions>
    <execution>
      <id>read-properties</id>
      <phase>initialize</phase>
      <goals>
        <goal>read-project-properties</goal>
      </goals>
    </execution>
  </executions>                              
  <configuration>
    <filePaths>
      <!--assume the descriptor project has a file in the root of the jar -->
      <filePath>${env}.properties</filePath>
    </filePaths>
  </configuration> 
  <dependencies>
    <!-- reference the properties jar for the particular environment-->
    <dependency>
      <groupId>some.descriptor.group</groupId>
      <artifactId>env-${env}-descriptor</artifactId>
      <version>0.0.1</version>
    </dependency>
  </dependencies>
</plugin>

1

রুট প্যারেন্ট প্রোপার্টি ফাইলে সম্পত্তি লিখতে আমি উপরে থেকে গ্রোভি স্ক্রিপ্টটি উন্নত করেছি:

import java.io.*;
String p = project.properties['env-properties-file']
File f = new File(p)
if (f.exists()) {
try{
FileWriter fstream = new FileWriter(f.getAbsolutePath())
BufferedWriter out = new BufferedWriter(fstream)
String propToSet = f.getAbsolutePath().substring(0, f.getAbsolutePath().lastIndexOf(File.separator))
if (File.separator != "/") {
propToSet = propToSet.replace(File.separator,File.separator+File.separator+File.separator)
}
out.write("jacoco.agent = " + propToSet + "/lib/jacocoagent.jar")
out.close()
}catch (Exception e){
}
}
String ret = "../"
while (!f.exists()) {
f = new File(ret + p)
ret+= "../"
}
project.properties['env-properties-file-by-groovy'] = f.getAbsolutePath()

0

আমি মনে করি আপনি যদি ফাইন্ডব্যাগস প্লাগইন এবং মাল্টিমোডুলের উদাহরণে ব্যবহৃত এক্সটেনশন প্যাটার্নটি ব্যবহার করেন তবে আপনি পরম পাথ সম্পর্কিত বিশ্বব্যাপী সম্পত্তি সেট করতে সক্ষম হতে পারেন। এটি শীর্ষ ব্যবহার করে

মাল্টি মডিউল জন্য উদাহরণ

শীর্ষ স্তরের পোমের একটি অসম্পৃক্ত বিল্ড-কনফিগার প্রকল্প এবং মাল্টিমিডুল প্রকল্পের মডিউলগুলির জন্য একটি অ্যাপ-প্যারেন্ট রয়েছে। অ্যাপ-প্যারেন্টটি বিল্ড-কনফিগার প্রকল্পের সাথে নিজেকে লিঙ্ক করতে এবং এ থেকে সংস্থানগুলি পেতে এক্সটেনশন ব্যবহার করে। এটি মডিউলগুলিতে সাধারণ কনফিগারেশন ফাইল বহন করতে ব্যবহৃত হয়। এটি পাশাপাশি বৈশিষ্ট্যগুলির জন্য একটি নালী হতে পারে। আপনি বিল্ড-কনফিগারেশনের দ্বারা গ্রাস করা কোনও সম্পত্তি ফাইলটিতে শীর্ষ দির লিখতে পারেন। (এটি খুব জটিল বলে মনে হচ্ছে)

সমস্যাটি হ'ল এই কাজটি করার জন্য মাল্টি-মডিউল প্রকল্পে একটি নতুন শীর্ষ স্তর অবশ্যই যুক্ত করতে হবে। আমি একটি সত্যিকারের সম্পর্কহীন বিল্ড-কনফিগার প্রকল্পের সাথে পদক্ষেপের চেষ্টা করেছি কিন্তু এটি ক্লডজি ছিল এবং ভঙ্গুর মনে হয়েছিল।


0

এটি রোমান্টাজের উত্তরকে প্রসারিত করে, যা দুর্দান্ত সমাধানের ফলে সমস্যাটি সমাধান হয় এবং মেভেনের নিখোঁজ কার্যকারিতা স্পষ্টভাবে নির্দেশ করে। আমি প্লাগইনটির পরবর্তী সংস্করণটি বেছে নিয়েছি এবং প্রকল্পটি 3 স্তরেরও বেশি গভীর হতে পারে এমন কেসটি যুক্ত করেছি।

<pluginManagement>
  <plugins>
    ..
    <plugin>
      <groupId>org.codehaus.gmaven</groupId>
      <artifactId>groovy-maven-plugin</artifactId>
      <version>2.0</version>
    </plugin>
    ..
  </plugins>
</pluginManagement>

আমি ফাইলের নাম সংজ্ঞায়িত করার জন্য কোনও সম্পত্তি না ব্যবহার করার সিদ্ধান্ত নিয়েছি। যদি build.properties পাওয়া না যায় তবে এটি চিরকালের জন্য স্পিন করবে Note আমি একটি .git dir সনাক্তকরণ যোগ করেছি, তবে প্রতিক্রিয়াটিকে জটিল করতে চাইনি যাতে এটি এখানে প্রদর্শিত হয় না।

  <plugin>
      <groupId>org.codehaus.gmaven</groupId>
      <artifactId>groovy-maven-plugin</artifactId>
      <executions>
          <execution>
              <phase>validate</phase>
              <goals>
                  <goal>execute</goal>
              </goals>
              <configuration>
                 <source>
                    import java.io.File;
                    String p = "build.properties";
                    while(true) {
                      File f = new File(p); 
                      if(f.exists()) {
                        project.properties['project-properties-file'] = f.getAbsolutePath();
                        break;
                      }
                      else {
                        p = "../${p}";
                      }
                    }
                </source>
              </configuration>
          </execution>
      </executions>
  </plugin>

0

মাল্টি-মডিউল প্রকল্পের মূল প্রকল্পে রাখা স্থানীয় সংগ্রহস্থলের জন্য আমার অনুরূপ সমস্যা সমাধান করা দরকার। মূলত আসল পথটি ছিল ${basedir}/ lib। অবশেষে আমি আমার মধ্যে এটি স্থির করে parent.pom:

<repository>
    <id>local-maven-repo</id>
    <url>file:///${basedir}/${project.parent.relativePath}/lib</url>
</repository>

এটি basedirসর্বদা স্থানীয় স্থানীয় মডিউলকে দেখায়, "মাস্টার" প্রকল্পের পথ পাওয়ার কোনও উপায় নেই (মাভেনের লজ্জা)। আমার কিছু সাবমডিউলগুলি একটি ডিয়ার গভীর, কিছু দুটি ডায়ার গভীর, তবে এগুলির সবগুলিই সরাসরি সাবমডিউলগুলি পিতামাতার যা রেপো ইউআরএল সংজ্ঞায়িত করে।

সুতরাং এটি সাধারণভাবে সমস্যার সমাধান করে না। আপনি এটিকে সর্বদা ক্লে-এর গৃহীত উত্তরের সাথে একত্রিত করতে এবং কিছু অন্যান্য সম্পত্তি সংজ্ঞায়িত করতে পারেন - ভাল কাজ করে এবং কেবলমাত্র সেই ক্ষেত্রেই নতুন সংজ্ঞা দেওয়া দরকার যেখানে মানটি parent.pomযথেষ্ট পরিমাণে ভাল না। অথবা আপনি কেবল প্লাগইনটি পুনরায় কনফিগার করতে পারেন - যা আপনি কেবল পম শিল্পকর্মগুলিতে করেন (অন্যান্য উপ-মডিউলগুলির পিতা-মাতা)। বিশেষ জায়গায় প্লাগইন কনফিগারেশনের কোনও পরিবর্তন না হলে বিশেষত যখন আরও বেশি জায়গায় এর প্রয়োজন হয় তবে সম্পত্তিতে প্রাপ্ত মানটি সম্ভবত আরও ভাল।

মানটিতে ব্যবহার করা basedirএখানে প্রয়োজনীয় অংশ ছিল, কারণ ইউআরএল file://${project.parent.relativePath}/libকৌশলটি করতে চায় নি (আমি এটির তুলনায় একটি স্ল্যাশ সরিয়েছি)। এমন সম্পত্তি ব্যবহার করা যা আমাকে ভাল পরমপথ দেয় এবং তারপরে এটি থেকে আপেক্ষিকভাবে যাওয়া জরুরি ছিল।

যখন পথটি ইউআরএল / ইউআরআই নয়, তখন সম্ভবত এটি ফেলে দেওয়ার মতো সমস্যা নেই basedir



-1

আপনি চেষ্টা করেছেন ../../env_${env}.properties?

মডিউল 2 যখন সাব-মডিউলগুলির সমান স্তরে থাকে তখন আমরা সাধারণত নিম্নলিখিতটি করি

<modules>
    <module>../sub-module1</module>
    <module>../sub-module2</module>
    <module>../sub-module3</module>
</modules>

আমি ভাবব ../ .. আপনাকে দুটি স্তরের উপরে উঠতে দেবে। যদি তা না হয় তবে আপনি লেখকগুলিতে প্লাগের সাথে যোগাযোগ করতে এবং এটি কোনও পরিচিত সমস্যা কিনা তা দেখতে চাইতে পারেন।


যদি আমি প্রধান পোম.এক্সএমএলকে ../../env.propগুলি রাখি, তবে আমি একটি ত্রুটি পেয়ে যাব যখন মাভেন 2 মূল পম এবং সমস্ত মডিউলএক্স তৈরির চেষ্টা করবে। এই কনফিগারেশনটি আসলে সমস্ত উপ-মডিউলগুলির জন্যই কাজ করবে ...
রোমেন লিনসালাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.