سؤال

لدي ملفات التكوين والمستندات المختلفة التي أرغب في نسخها من بيئة DEV إلى دليل Dev-Server باستخدام Maven2. الغريب، مافن لا يبدو قويا في هذه المهمة.


بعض الخيارات:

  • استخدام بسيط أ ينسخ المهمة في مافن

<copy file="src/main/resources/config.properties" tofile="${project.server.config}/config.properties"/>

  • استخدم البرنامج المساعد النمل لتنفيذ ينسخ من النمل.

  • بناء قطعة أثرية من النوع أزيز, ، إلى جانب قطعة أثرية "الرئيسية" من POM والتي عادة ما تكون من النوع إناء, ، ومن بعد أفرغ هذا قطعة أثرية من المستودع في الدليل المستهدف.

  • موارد المنافين البرنامج المساعد، كما ذكر أدناه.

  • البرنامج المساعد الجمعية في Maven - ولكن يبدو أن هذا يتطلب الكثير من التعريفات اليدوية، عندما أريد أن أفعل أشياء ببساطة و "تقليدية".

  • هذه الصفحة حتى يوضح كيفية بناء البرنامج المساعد للقيام بالنسخ!

  • Maven-Upload. البرنامج المساعد، كما ذكر أدناه.

  • مافن - المسافة البرنامج المساعد مع ينسخ, ، كما هو مذكور ادناه.


كل هذه تبدو مخصصة لا داعية: من المفترض أن يتفتح مافن في القيام بهذه المهام القياسية دون ضجة وإزعاج.

اي نصيحه؟

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

المحلول

لا تخجل بعيدا عن البرنامج المساعد Antrun. فقط لأن بعض الناس يميلون إلى الاعتقاد بأن النمل والمعارضة في المعارضة، فهي ليست كذلك. استخدم مهمة النسخ إذا كنت بحاجة إلى أداء بعض التخصيص لمرة واحدة لا مفر منها:

<project>
  [...]
  <build>
    <plugins>
      [...]
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <phase>deploy</phase>
            <configuration>
              <tasks>

                <!--
                  Place any Ant task here. You can add anything
                  you can add between <target> and </target> in a
                  build.xml.
                -->

              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

في الإجابة على هذا السؤال، أنا أركز على تفاصيل ما طلبته. كيف يمكنني نسخ ملف؟ سؤال الاسم واسم المتغير يقودني إلى أسئلة أكبر مثل: "هل هناك طريقة أفضل للتعامل مع توفير الخادم؟" استخدم MAVEN كأنظمة للبناء لتوليد قطعة أثرية قابلة للنشر، ثم قم بإجراء هذه التخصيصات إما في وحدات منفصلة أو في مكان آخر تماما. إذا شاركت أكثر قليلا من بيئة البناء الخاصة بك، فقد تكون هناك طريقة أفضل - هناك مكونات إضافية لتوفير عدد من الخوادم. هل يمكنك إرفاق تجميع غير مؤلف في جذر الخادم؟ ما الخادم الذي تستخدمه؟

مرة أخرى، أنا متأكد من وجود طريقة أفضل.

نصائح أخرى

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.3</version>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include> **/*.properties</include>
            </includes>
        </resource>
    </resources>
    ...
</build>

من أجل نسخ استخدام الملف:

        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
                <execution>
                    <id>copy-resource-one</id>
                    <phase>install</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>

                    <configuration>
                        <outputDirectory>${basedir}/destination-folder</outputDirectory>
                        <resources>
                            <resource>
                                <directory>/source-folder</directory>
                                <includes>
                                    <include>file.jar</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
           </executions>
        </plugin>

من أجل نسخ المجلد باستخدام المجلدات الفرعية، استخدم التكوين التالي:

           <configuration>
              <outputDirectory>${basedir}/target-folder</outputDirectory>
              <resources>          
                <resource>
                  <directory>/source-folder</directory>
                  <filtering>true</filtering>
                </resource>
              </resources>              
            </configuration>  

أنقذني البرنامج المساعد التبعي في Maven الكثير من الوقت المداعش مع مهام النمل:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>install-jar</id>
            <phase>install</phase>
            <goals>
                <goal>copy</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>...</groupId>
                        <artifactId>...</artifactId>
                        <version>...</version>
                    </artifactItem>
                </artifactItems>
                <outputDirectory>...</outputDirectory>
                <stripVersion>true</stripVersion>
            </configuration>
        </execution>
    </executions>
</plugin>

ال الاعتماد: نسخ هو الوثائق، ولديها أهداف أكثر فائدة مثل Unpack.

لمهام النسخ البسيطة التي يمكنني أن أوصي بها نسخة إعادة تسمية مافن البرنامج المساعد. وبعد انها مباشرة إلى الأمام وسهلة الاستخدام:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>com.coderplus.maven.plugins</groupId>
        <artifactId>copy-rename-maven-plugin</artifactId>
        <version>1.0</version>
        <executions>
          <execution>
            <id>copy-file</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <sourceFile>src/someDirectory/test.environment.properties</sourceFile>
              <destinationFile>target/someDir/environment.properties</destinationFile>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

إذا كنت ترغب في نسخ أكثر من ملف واحد، استبدل <sourceFile>...</destinationFile> جزء مع

<fileSets>
  <fileSet>
    <sourceFile>src/someDirectory/test.environment.properties</sourceFile>
    <destinationFile>target/someDir/environment.properties</destinationFile>
  </fileSet>
  <fileSet>
    <sourceFile>src/someDirectory/test.logback.xml</sourceFile>
    <destinationFile>target/someDir/logback.xml</destinationFile>
  </fileSet>                
</fileSets>

علاوة على ذلك، يمكنك تحديد عمليات إعدام متعددة في مراحل متعددة إذا لزم الأمر، والهدف الثاني هو "إعادة تسمية"، مما يفعل ببساطة ما تقوله بينما يبقى بقية التكوين نفسه. لمزيد من أمثلة الاستخدام الرجوع إلى الاستخدام - صفحة.

ملحوظة: هذا البرنامج المساعد يمكن فقط نسخ الملفات، وليس الدلائل. (بفضل @ james.garriss للعثور على هذا القيد.)

الحل النمل أعلاه أسهل في تكوينه، لكنني قد حظا حظا باستخدام البرنامج المساعد من Utlassian. لم أتمكن من العثور على وثائق جيدة، وهنا كيفية استخدامها:

<build>
  <plugin>
    <groupId>com.atlassian.maven.plugins</groupId>
    <artifactId>maven-upload-plugin</artifactId>
    <version>1.1</version>
    <configuration>
       <resourceSrc>
             ${project.build.directory}/${project.build.finalName}.${project.packaging}
       </resourceSrc>
       <resourceDest>${jboss.deployDir}</resourceDest>
       <serverId>${jboss.host}</serverId>
       <url>${jboss.deployUrl}</url>
     </configuration>
  </plugin>
</build>

يتم تعريف المتغيرات مثل "$ {{{{{{{{{{{} {{{{{} {{} {} {{} هذا الحل غير مقيد إلى JBOSS، وهذا هو ما قمت به فقط لمتغيراتي. لدي ملف تعريف للتطوير والاختبار والعيش. حتى لتحميل أذني إلى مثيل JBOSS في بيئة الاختبار، سأقوم بتنفيذ:

mvn upload:upload -P test

فيما يلي Snipet من Settings.xml:

<server>
  <id>localhost</id>
  <username>username</username>
  <password>{Pz+6YRsDJ8dUJD7XE8=} an encrypted password. Supported since maven 2.1</password>
</server>
...
<profiles>
  <profile>
    <id>dev</id>
    <properties>
      <jboss.host>localhost</jboss.host> 
      <jboss.deployDir>/opt/jboss/server/default/deploy/</jboss.deployDir>
      <jboss.deployUrl>scp://root@localhost</jboss.deployUrl>
    </properties>
  </profile>
  <profile>
    <id>test</id>
    <properties>
       <jboss.host>testserver</jboss.host>
       ...

ملاحظات: ريبو أطلسيا مافن الذي يحتوي على هذا البرنامج المساعد هنا: https:/maven.atlassian.com/public/

أوصي بتنزيل المصادر والنظر في الوثائق داخل لرؤية جميع الميزات يوفر البرنامج المساعد.

`

حسنا، ليس من المفترض أن يكون من المفترض أن يكون مافن جيدا في القيام بمهام حبيبية دقيقة، بل ليس لغة نصية مثل باش أو نملة، إنه أمر مصنوع إلى حد ما - أنت تقول - أحتاج إلى حرب، أو أذن، وأنت تحصل عليه. ومع ذلك، إذا كنت بحاجة إلى تخصيص كيف يجب أن تبدو الحرب أو الأذن في الداخل، لديك مشكلة. ليس فقط إجرائيا مثل النمل، ولكن تصريح. هذه لديها بعض الايجابيات في البداية، ويمكن أن يكون لها الكثير من سلبيات في النهاية.

أعتقد أن المفهوم الأولية كان لديه مكونات دقيقة، وهذا "فقط العمل" ولكن الواقع مختلف إذا كنت تفعل أشياء غير قياسية.

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

لقد كان لدي تجربة جيدة جدا مع نسخة مافن. وبعد لديها بناء جملة أكثر ملاءمة وموجزة في المقارنة مع المكون الإضافي للموارد في المنافسين.

طريقة عامة لنسخ الملفات التعسفية هي الاستفادة مافن واجون تجريد النقل. يمكن أن تتعامل مع وجهات مختلفة عبر بروتوكولات مثل file, HTTP, FTP, SCP أو WebDAV.

هناك عدد قليل من الإضافات التي توفر التسهيلات لنسخ الملفات من خلال استخدام Wagon. وبعد الأكثر ملاءمة هي:

  • خارج الصندوق Maven نشر البرنامج المساعد

    هنالك ال deploy-file المرمى. انها غير مرنة تماما ولكن يمكن أن تحصل على وظيفة القيام به:

    mvn deploy:deploy-file -Dfile=/path/to/your/file.ext -DgroupId=foo 
    -DartifactId=bar -Dversion=1.0 -Durl=<url> -DgeneratePom=false
    

    عيب كبير في استخدام Maven Deploy Plugin هو أنه تم تعيينه للعمل مع مستودعات مافن. يفترض بنية خاصة والبيانات الوصفية. يمكنك أن ترى أن الملف وضعه تحت foo/bar/1.0/file-1.0.ext ويتم إنشاء ملفات الاختباري. ليس هناك اي طريقة حول هذا.

  • Wagon Maven Plugin.

    استخدم ال upload-single المرمى:

    mvn org.codehaus.mojo:wagon-maven-plugin:upload-single
    -Dwagon.fromFile=/path/to/your/file.ext -Dwagon.url=<url>
    

    استخدام Wagon Maven Plugin للنسخ واضحة ويبدو أن الأكثر تنوعا.


في الأمثلة أعلاه <url> يمكن أن يكون من أي بروتوكول مدعوم. انظر قائمة القائمة مقدمي العربة. وبعد علي سبيل المثال

  • نسخ الملف محليا: file:///copy/to
  • نسخ الملف إلى المضيف البعيد قيد التشغيل SSH: scp://host:22/copy/to


الأمثلة أعلاه تمرير المعلمات البرنامج المساعد في سطر الأوامر. بدلا من ذلك، يمكن تكوين الإضافات مباشرة في POM. وبعد ثم سوف يكون الاحتجاج ببساطة مثل mvn deploy:deploy-file@configured-execution-id. وبعد أو يمكن ربط مرحلة بناء معينة.


يرجى ملاحظة أنه بالنسبة للبروتوكولات SCP للعمل ستحتاج إلى تحديد امتداد في POM:

<build>
  [...]
  <extensions>
    <extension>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-ssh</artifactId>
      <version>2.12</version>
    </extension>
  </extensions>


إذا كانت الوجهة التي تقوم بنسخها لتتطلب المصادقة، فيمكن توفير بيانات الاعتماد عبر Server الإعدادات. repositoryId/serverId مرت إلى الإضافات يجب أن تتطابق مع الخادم المحدد في الإعدادات.

لا أستطيع إلا أن أفترض أن الخاصية $ {project.server.config} هو شيء محدد مخصص وخارج تخطيط الدليل القياسي.

إذا كان الأمر كذلك، فأنا أستخدم مهمة النسخ.

هناك طريقة أخرى هي حزمة هذه الأشياء في قطعة أثرية باستخدام البرنامج المساعد التجميع. ثم يمكنك استخدام البرنامج المساعد التبعية لفتح هذه الملفات التي تريدها. هناك أيضا نسخ أهداف في البرنامج المساعد التبعية لنسخ القطع الأثرية.

كنت قادرا على قطعة معا عددا من المصادر المختلفة لهذه الإجابة:

...
<repository>
    <id>atlassian</id>
    <name>Atlassian Repo</name>
    <url>https://maven.atlassian.com/content/repositories/atlassian-public</url>
</repository>
...
<dependency>
    <groupId>com.atlassian.maven.plugins</groupId>
    <artifactId>maven-upload-plugin</artifactId>
    <version>1.1</version>
</dependency>
...
<plugin>
    <groupId>com.atlassian.maven.plugins</groupId>
    <artifactId>maven-upload-plugin</artifactId>
    <version>1.1</version>
    <configuration>
        <serverId>jira-repo</serverId>
        <resourceSrc>
            ${project.build.directory}/${project.build.finalName}.${project.packaging}
        </resourceSrc>
        <resourceDest>opt/jira/webapps</resourceDest> <!-- note: no leading slash -->
        <url>scp://root@jira</url>
    </configuration>
</plugin>
...

من ~/.m2/settings.xml:

...
<servers>
  <server>
    <id>jira-repo</id>
    <username>myusername</username>
    <password>mypassword</password>
  </server>
</servers>
...

ثم قم بتشغيل الأمر: (the -x هو لتصحيح)

mvn -X upload:upload

لتلخيص بعض الإجابات الدقيقة أعلاه: مافن تم تصميمه لبناء وحدات ونسخ النتائج إلى مستودع Maven. يجب إجراء أي نسخ من الوحدات النمطية لدليل النشر / المثبت - خارج سياق الوظائف الأساسية ل MAVEN، على سبيل المثال مع النمل / Maven ينسخ أمر.

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