سؤال

أحاول معرفة ما إذا كان لدى Maven بعض المكونات المضمنة التي يمكن استخدامها في القطع الأثرية للوقت. لقد قمت بإنشاء ملف تجميع وأستخدم البرنامج المساعد Maven-Assembly لإنشاء توزيع نهائي (الجرار ، المستندات ، البرامج النصية ، إلخ). أريد تسمية ملف التوزيع هذا باسم Domain_year_month_day.zip. كيف يمكنني إلحاق جزء اليوم من الطابع الزمني حتى نهاية ملف zip النهائي الذي يتم إنتاجه. شكرًا.

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

المحلول

يمكنك استخدام Maven-timestamp-plugin لتعيين خاصية (على سبيل المثال timestamp) واستخدمها لاحقًا في الاسم الأخير لتجميعك.

<plugin>
   <artifactId>maven-assembly-plugin</artifactId>
   <executions>
       <execution>
           <id>create-assembly</id>
           <phase>package</phase>
           <goals>
               <goal>single</goal>
           </goals>
           <configuration>
               <appendAssemblyId>false</appendAssemblyId>
               <finalName>domain_${timestamp}</finalName>
               <descriptors>
                   <descriptor>src/main/assembly/my-descriptor.xml</descriptor>
               </descriptors>
               <attach>true</attach>
           </configuration>
       </execution>
   </executions>
</plugin>

كبديل ، يمكنك وضع بعض التعليمات البرمجية الرائعة في POM باستخدام Gmaven البرنامج المساعد:

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <id>set-custom-property</id>
      <phase>initialize</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>
          def timestamp = new Date().format('MM_dd_yy')
          project.properties.setProperty('timestamp', timestamp)
        </source>
      </configuration>
    </execution>
    <execution><!-- for demonstration purpose -->
      <id>show-custom-property</id>
      <phase>generate-resources</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>
          println project.properties['timestamp']
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>

عينة إخراج يوضح الخاصية:

$ mvn generate-resources 
[INFO] Scanning for projects...
[INFO]                                                                         
...
[INFO] --- gmaven-plugin:1.3:execute (set-custom-property) @ Q4081274 ---
[INFO] 
[INFO] --- gmaven-plugin:1.3:execute (show-custom-property) @ Q4081274 ---
11_02_10
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...

ومرة أخرى ، استخدم هذه الخاصية لاحقًا باسم بناء التجميع الخاص بك.

نصائح أخرى

لا تحتاج إلى Maven-Timestamp-Plugin مع إصدارات أحدث من Maven. منذ 2.1'ish ، قدم Maven الخاصية الخاصة maven.build.timestamp.

قمت بتعيين التنسيق في خصائص POM بشيء من هذا القبيل:

<maven.build.timestamp.format>yyyy-MM-dd'T'HH.mm.ss</maven.build.timestamp.format>

ثم استخدم $ {maven.build.timestamp} أينما كنت بحاجة إلى خاصية الطابع الزمني. نرى http://maven.apache.org/guides/introduction/introduction-the-pom.html للتفاصيل.

كما ${maven.build.timestamp} يبدو عربات التي تجرها الدواب في Maven ، الحل البديل كما يلي:

إنشاء متغير جديد (اخترت "build.timestamp" ، هنا) - واختياريا ، حدد التنسيق:

pom.xml

<project>
    ...
    <properties>
        ...
        <build.timestamp>${maven.build.timestamp}</build.timestamp>
        <maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format> 
                     <!-- default is: yyyyMMdd-HHmm -->
    </properties>
    <build>
    ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptors>
                    <descriptor>some-assembly.xml</descriptor>
                </descriptors>
            </configuration>
            <executions>
                <execution>
                    <id>make</id>
                    <phase>package</phase>
                    <goals>
                        <goal>assembly</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

...

استخدم المتغير المخصص من أي مكان:

some-assembly.xml

<?xml version="1.0"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>release-${build.timestamp}</id>
    <baseDirectory>/</baseDirectory>
    <includeBaseDirectory>false</includeBaseDirectory>
    <formats>
      <format>zip</format>
    </formats>
    <fileSets>
      <fileSet>
        <directory>${project.build.directory}/${project.artifactId}-${project.version}</directory>
      </fileSet>
    </fileSets>
</assembly>

إذا كنت تستخدم Hudson/Jenkins ، فيمكنك فقط استخدام المتغير $ {build_id} للحصول على نوع من الطابع الزمني لأي ملف خصائص تريد تحريره.

معلومات إلى متغيرات البيئة الأخرى يدعم هدسون/جنكينز ، ألقِ نظرة هنا:http://wiki.hudson-ci.org/display/hudson/building+a+software+project

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