রিসোর্স ফিল্টারিংয়ের জন্য maven.build.timestamp কীভাবে অ্যাক্সেস করবেন


107

আমি maven 3.0.4 ব্যবহার করছি এবং বিল্ড টাইমস্ট্যাম্পটি আমার অ্যাপ্লিকেশনটিতে অ্যাক্সেসযোগ্য করে তুলতে চাই। এর জন্য, আমি একটি .propertiesফাইলের মধ্যে একটি স্থানধারক লাগিয়ে দিচ্ছি এবং মাভেন ফিল্টারটি তৈরি করতে দেব। এই জন্য সূক্ষ্ম কাজ করা হয় ${project.version}, ${maven.build.timestamp}ফিল্টারিং উপর প্রতিস্থাপিত করা হয় না।

সম্পত্তিটি বিল্ডে উপলব্ধ বলে মনে হচ্ছে - আমি এটি আর্টিক্যাক্টের নামটি সংশোধন করতে ব্যবহার করতে পারি:

<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>

তাহলে কেন এটি রিসোর্স ফিল্টারিংয়ের জন্য উপলব্ধ নয়? এবং আরও গুরুত্বপূর্ণ, আমি কীভাবে এটি অ্যাক্সেসযোগ্য করব?

উত্তর:


220

আমি এই নিবন্ধটি আবিষ্কার করেছি , ব্যাখ্যা করে যে মাভেনে বাগ থাকার কারণে , বিল্ড টাইমস্ট্যাম্প ফিল্টারিংয়ে প্রচারিত হয় না। কাজটি হ'ল টাইমস্ট্যাম্পটি অন্য কোনও সম্পত্তিতে মোড়ানো:

<properties>
   <timestamp>${maven.build.timestamp}</timestamp>
   <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
</properties>

ফিল্টারিং তখন প্রত্যাশার মতো কাজ করে

buildTimestamp=${timestamp}

1
অন্যের জন্য কেবল একটি নোট, আমার এতে সমস্যা ছিল, কারণ আমি টেরক্যাটটি Eclipse এর মধ্যে ব্যবহার করছি এবং দেখে মনে হচ্ছে এটি ঠিকঠাক কাজ করছে না - target/${project}ফোল্ডারে প্রতিস্থাপন ঠিক আছে , তবে আমার বাস্তব কনফিগারেশনে টমক্যাট এই ফোল্ডারটি ব্যবহার করছে না ...
বেতলিস্টা

3
@ বিটলিস্টা হ্যাঁ, গ্রহনে সার্ভার সংহতকরণ উত্স ডিরেক্টরিটি ব্যবহার করছে বলে মনে হচ্ছে। আমি গ্রহণের একীকরণ ত্যাগ এবং কমান্ড লাইন থেকে মাভেন ব্যবহার করার এক কারণ ছিল।
কোস্টজা

1
পোমে একাধিক জায়গা দেওয়া আছে যেখানে আমার টাইমস্ট্যাম্প প্রয়োজন, তবে বিভিন্ন ফর্ম্যাটে (উদাহরণস্বরূপ কোনও ফাইলের নাম এবং একটি বিল্ড টাইম স্ট্রিং), কীভাবে আমি maven.build.timestamp.formatএকাধিকবার ব্যবহার করতে পারি ?
ড্যানিয়েল অ্যাল্ডার

13
কোনও কাজের নয়। ফিল্টারিং ${timestamp}আক্ষরিক স্ট্রিংয়ের সাথে প্রতিস্থাপন করে ${maven.build.timestamp}
কেভিন ক্রামউইদে

1
আপনি যদি স্প্রিংবুট ব্যবহার করছেন তবে আপনাকে লিখতে হবেbuildTimestamp=@timestamp@
জুলিয়েন ফেনিউ

10

আমি নিশ্চিত করতে পারি যে ম্যাভেন ৩.x {maven.build.timestamp}এখন "কাজ করছে"। তারা সমস্যাটিকে ঘিরে কাজ করে, স্পষ্টতই। আর কোনও বাড়তি propertiesকাজের প্রয়োজন নেই।

তবে সাবধান হন আপনার "ফিল্টারিং" প্লাগইন (ম্যাভেন-রিসোর্সস-প্লাগইন) আপ টু ডেট রয়েছে। এটি তুলনামূলকভাবে নতুন হওয়া দরকার, সুতরাং যদি mvn help:effective-pomকোনও পুরানো সংস্করণ দেখায় (উদা: ২.6), এটি আরও নতুন কিছুতে ধাক্কা মেরে, এটি আমার জন্য স্থির করুন, ৩.x প্রাক্তন:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>3.1.0</version>
</plugin>

<properties><timestamp>... workaround আর প্রয়োজন হয় না ...

এটি কীভাবে কমান্ড লাইনে ইন্টেলিজে কাজ করছে তাও এক ধরণের, পরিষ্কার হয়েছে। ইন্টেলিজ সম্ভবত তাদের নিজস্ব "সংশোধিত / অভ্যন্তরীণ" মাভেন কনস্ট্যান্ট ব্যবহার করে, সুতরাং এটি সেখানে কাজ করছে, তবে ম্যাভেন কমান্ড লাইন থেকে নয়।

এছাড়াও আপনি যদি পমকে একটি ফিল্টারিং রিসোর্স ডিরেক্টরি যুক্ত করেন তবে আপনাকে অবশ্যই ডিফল্ট ডিরেক্টরিটি "পুনরায় যুক্ত" করতে হবে, এটি হারিয়ে গেছে, প্রাক্তন:

  <resource>
    <directory>src/main/resources-filtered</directory> <!-- to get "maven.build.timestamp" into resource properties file -->
    <filtering>true</filtering>
  </resource>
  <resource>
    <directory>src/main/resources</directory> <!-- apparently have to add this is you have the other... -->
  </resource>

এনবি যদি আপনি আপনার পিতামাতার হিসাবে বসন্ত বুট ব্যবহার করেন তবে আপনাকে পরিবর্তে @ maven.build.timestamp @ ব্যবহার করতে হবে । এছাড়াও মনে রাখবেন যে আপনি যদি বসন্ত বুট ব্যবহার করে থাকেন তবে এমন কোনও ফাইল META-INF/build-info.propertiesযা read চ্ছিকভাবে spring-boot-maven-pluginআপনি পড়তে পারেন তার দ্বারা তৈরি করা হয়েছে (বসন্ত BuildPropertiesএটি পড়ার সুবিধার জন্য একটি শিম সরবরাহ করে)।


1
দুর্ভাগ্যক্রমে এটি ম্যাভেন-ওয়ার-প্লাগইন ( <webResources><resource><filtering>) এর জন্য এখনও কাজ করে না :-( এমআরওআর -১১৫ দেখুন -> এখনও সেখানে
কাজটি করতে

1
বিভিন্ন প্লাগইন আলাদাভাবে ফিল্টার করে। আপনি যদি মাভেন-অ্যাসেম্বলি-প্লাগইন v3.3.0 এর মধ্যে ফিল্টারিং ব্যবহার করেন তবে $ {maven.build.timestamp still এখনও সরাসরি উপলভ্য নয় এবং আপনার কাজটি ব্যবহারের প্রয়োজন <properties><timestamp>...। আরও দেখুন issues.apache.org/jira/browse/MASSEMBLY-603
Cheeso

4

অন্যদের জন্য স্ট্যাকওভারফ্লো সামগ্রীগুলি সমৃদ্ধ করার জন্য, যে আমার মতো, এই পোস্টটিকে "সমস্যা" সমাধানের উপায় হিসাবে খুঁজে পেয়েছিল ${maven.build.timestamp}। এটি কোনও মাভেন বাগ নয়, তবে এম 2e এর একটি প্রত্যাশিত আচরণ, যা এই পোস্টে দেখা যাবে ।

অতএব, আমি বিশ্বাস করি যে আমরা সমাধানটি "সংশোধন" হওয়ার আশা করতে পারি না, যেহেতু, আমি যা বুঝি, সংশোধনটি ধারণাগত বিষয়গুলিকে জড়িত।

আমার ক্ষেত্রে, আমি যা করেছি তা হ'ল buildnumber-maven-pluginএই অন্যান্য পোস্টে বর্ণিত প্লাগইন ( ) ব্যবহার করা ।


আমি buildnumber-maven-pluginএকই রকম সমস্যা পেয়েছি , যথা এটি যে পরিবর্তনশীলটি উত্পন্ন করে তা কেবলমাত্র নির্দিষ্ট প্রসঙ্গে উপলব্ধ, ফিল্টারিং নয়। এক্সিকিউশন ফেজ বা লক্ষ্যগুলির সাথে সংলাপের মাধ্যমে আপনি এটি কাটিয়ে উঠতে সক্ষম হতে পারেন, তবে বিল্ট-ইন সমাধানটি এত সহজ বলে মনে হচ্ছে।
MarkHu

1

পম প্রকল্প স্তরে ম্যাভেন বৈশিষ্ট্য যুক্ত করা সঠিক স্থানীয় টাইমজোনকে বিবেচনায় নেয় না, তাই টাইমস্ট্যাম্পটি ভুল দেখাতে পারে:

<properties><timestamp>${maven.build.timestamp}</timestamp></properties>

বিল্ড-সহায়ক-মাভেন-প্লাগইন ব্যবহার করে টাইমস্ট্যাম্পে সঠিক সময় অঞ্চল এবং বর্তমান দিবালোক সংরক্ষণ প্রয়োগ করে:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.9.1</version>
            <executions>
                <execution>
                    <id>timestamp-property</id>
                    <goals>
                        <goal>timestamp-property</goal>
                    </goals>
                    <configuration>
                        <name>timestamp</name>
                        <pattern>yyyy-MM-dd HH:mm:ss</pattern>
                        <timeZone>Europe/Zurich</timeZone>
                    </configuration>
                </execution>
            </executions>
        </plugin>
     </plugins>
     <resources>
         <resource>
             <directory>src/main/resources</directory>
             <filtering>true</filtering>
         </resource>
     </resources>
 </build>

প্যাকেজিংয়ের সময়, মাভেন / রিসোর্স ফোল্ডারে যেকোন টোকেন টাইমস্ট্যাম্প প্রতিস্থাপন করবে, যেমন রিসোর্স / সংস্করণ p

build.timestamp = $ {টাইমস্ট্যাম্প}

তারপরে আপনি এই অ্যাপ্লিকেশনটিতে এই বৈশিষ্ট্য ফাইলটি লোড করতে পারেন।

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