แนวทางปฏิบัติที่ดีที่สุดสำหรับการคัดลอกไฟล์ด้วย Maven


194

ฉันมีไฟล์ปรับแต่งและเอกสารต่าง ๆ ที่ฉันต้องการคัดลอกจากสภาพแวดล้อม dev ไปยังไดเรกทอรี dev-server โดยใช้ Maven2 น่าแปลกที่ Maven ดูเหมือนจะไม่แข็งแกร่งในงานนี้

ตัวเลือกบางอย่าง:

  • ใช้งานคัดลอกอย่างง่ายใน Maven
<copy file="src/main/resources/config.properties" tofile="${project.server.config}/config.properties"/>
  • ใช้ปลั๊กอิน Ant เพื่อดำเนินการคัดลอกจาก Ant

    • สร้างสิ่งประดิษฐ์ประเภทzipข้างสิ่งประดิษฐ์ "หลัก" ของ POM ซึ่งโดยปกติแล้วจะเป็นjarประเภทจากนั้นคลายสิ่งประดิษฐ์นั้นจากที่เก็บลงในไดเรกทอรีเป้าหมาย

    • maven-resources plugin ดังที่อธิบายไว้ด้านล่าง

    • ปลั๊กอิน Maven Assembly - แต่ดูเหมือนว่าจะต้องใช้คำจำกัดความของคู่มือจำนวนมากเมื่อฉันต้องการทำสิ่งต่าง ๆ อย่างง่าย ๆ และ "ตามอัตภาพ"

    • หน้านี้ยังแสดงวิธีการสร้างปลั๊กอินเพื่อทำการคัดลอก!

    • maven-upload plugin ดังที่ระบุไว้ด้านล่าง

    • maven-dependency-pluginพร้อมสำเนาตามที่ระบุไว้ด้านล่าง


สิ่งเหล่านี้ดูเหมือนจะไม่จำเป็นโดยเฉพาะ: Maven ควรจะเก่งในการทำงานมาตรฐานเหล่านี้โดยไม่ต้องวุ่นวายและรำคาญ

คำแนะนำใด ๆ?


2
Maven สร้างความคิดเกี่ยวกับวงจรชีวิตด้วยเฟส, การคัดลอกไฟล์แบบสุ่มไปยังงานเซิร์ฟเวอร์ระยะไกลไม่เหมาะกับเรื่องนี้ คิดถึงโครงการของคุณโดยรวมเสมอ
André

3
"สิ่งเหล่านี้ดูเหมือนไม่มีความจำเป็นเฉพาะกิจ: Maven ควรจะเก่งในการทำงานมาตรฐานเหล่านี้โดยไม่ต้องกังวลและรำคาญ" สิ่งที่คุณกำลังทำไม่ใช่งานมาตรฐาน หากสิ่งประดิษฐ์ของคุณเป็นสงคราม / หูสิ่งนี้จะง่ายเหมือนกับการใช้ปลั๊กอินการขนส่งสินค้า (cargo.codehaus.org/Maven2+plugin#Maven2plugin-get ...... ) สิ่งที่คุณกำลังอธิบายฟังดูมีความเฉพาะเจาะจงมากกับวิธีที่คุณใช้งานการปรับใช้ไม่ใช่การปรับใช้คอนเทนเนอร์แอ็พพลิเคชัน Java มาตรฐาน Maven ไม่ได้มุ่งเน้นที่จะจัดการกับกิจกรรมการปรับใช้เวลากับเซิร์ฟเวอร์ที่ใช้งานจริง ๆ แต่จะเน้นไปที่การสร้าง / พัฒนากิจกรรม
whaley

67
@ André: ฉันได้ยินเรื่องนี้ซ้ำแล้วซ้ำอีก แต่ขอโทษนั่นคือ BS ไม่มีอะไรผิดปกติกับการคิดโครงการโดยรวม แต่ส่วนหนึ่งของระบบการสร้างที่เหมาะสมควรเป็นฟังก์ชั่นที่ทำให้ฉันทำงาน X ได้อย่างตรงไปตรงมาเช่นการคัดลอกไฟล์และ Maven ไม่สามารถทำเช่นนั้นได้ มีเหตุผลหลายโครงการที่ผุดขึ้นมาเมื่อเร็ว ๆ นี้ซึ่งยอมรับกระบวนทัศน์การสร้างสคริปต์เป็นรหัส (เช่น Gradle, SBT หรือ Buildr)
Matthias

ฉันอยากจะแนะนำให้มี pom.xml สำหรับการสร้างสิ่งประดิษฐ์และอื่น ๆ สำหรับการปรับใช้สิ่งประดิษฐ์ที่กำหนด
Thorbjørn Ravn Andersen

คำแนะนำทั้งหมดข้างต้นดูเหมือนจะไม่อนุญาตให้ฉันคัดลอกไฟล์เฉพาะจากโครงการ / สิ่งประดิษฐ์ที่แตกต่างกันไปยังโครงการ Maven ฉันมีไฟล์บางไฟล์ภายใต้ src / main / folder ในสิ่งประดิษฐ์ที่กลายเป็น jar และฉันได้ลองใช้ปลั๊กอิน maven พึ่งพา แต่ฉันไม่พบวิธีที่จะพูดว่าไฟล์ใดที่ฉันต้องการคัดลอกและฉันได้รับ jar ทั้งหมด ไฟล์ในไฟล์ชุดประกอบตลอดเวลา ทุกข้อเสนอแนะอื่น ๆ ที่นี่เช่นทรัพยากรดูเหมือนจะไม่ให้ฉันไประบุวัตถุมากกว่าทรัพยากรภายในโครงการ
อเล็กซานเด Thenorio

คำตอบ:


120

อย่าอายไปจากปลั๊กอิน Antrun เพียงเพราะบางคนมักจะคิดว่า Ant และ Maven เป็นฝ่ายตรงกันข้ามพวกเขาไม่ได้ ใช้งานคัดลอกหากคุณต้องการทำการปรับแต่งแบบครั้งเดียวที่หลีกเลี่ยงไม่ได้:

<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 เป็นระบบบิลด์เพื่อสร้างสิ่งประดิษฐ์ที่สามารถนำไปใช้งานได้จากนั้นทำการปรับแต่งเหล่านี้ทั้งในโมดูลแยกหรืออย่างอื่น หากคุณแบ่งปันสภาพแวดล้อมการสร้างของคุณอีกเล็กน้อยอาจมีวิธีที่ดีกว่านั่นคือมีปลั๊กอินสำหรับจัดเตรียมเซิร์ฟเวอร์จำนวนหนึ่ง คุณสามารถแนบแอสเซมบลีที่ unpacked ในรากของเซิร์ฟเวอร์ได้หรือไม่ คุณใช้เซิร์ฟเวอร์อะไร

อีกครั้งฉันแน่ใจว่ามีวิธีที่ดีกว่า


ตัวบ่งชี้งานเลิกใช้แล้วหรือไม่?
แมตต์

3
@Matt ใช่taskตอนนี้พารามิเตอร์เลิกใช้แล้ว ( ปลั๊กอิน Antrun ) คุณควรใช้targetแทน (ตั้งแต่ 1.5) โชคไม่ดีมีตัวอย่างที่ผสมนี้ เช่นtargetพารามิเตอร์และversion<1.5
cuh

นี่เป็นคำตอบที่ยอมรับได้อย่างไร แน่นอนควรมีการร้องขอการเปลี่ยนแปลงเพื่อ maven เพื่อทำสำเนาสิ่งที่ง่าย
Wolfgang Fahl

137
<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>

ขอบคุณ @Peter ที่มีประโยชน์ ตอนนี้ฉันใช้เป้าหมาย copy-resources ทรัพยากรปลั๊กอินแทน antrun อันที่จริงแล้วมันง่ายกว่ามากและง่ายต่อการกำหนด แต่ฉันไม่สามารถรับมันได้ (เวอร์ชั่น 1.3) ผ่านคุณสมบัติที่กำหนดเองของ Maven ทั้งหมด (กำหนดไว้ในส่วน <คุณสมบัติ>) เพื่อ antrun ดังนั้นฉันจึงเปลี่ยนเป็นปลั๊กอินทรัพยากร
Cornel Masson

2
ฉันเคยคิดว่านี่เป็นคำตอบที่ถูกต้อง ... จนกระทั่งฉันตระหนักว่าปลั๊กอินทรัพยากรไม่มีการกำหนดค่าข้าม Antrun เป็นวิธีที่จะไป
Mike Post

การสร้างโปรไฟล์ข้ามนั้นไม่ยาก ยังไม่ได้ใช้ antrun ดังนั้นฉันจึงไม่สามารถพูดได้ว่าแบบไหนดีกว่า / ดีกว่า
Vivek Chavda

41

เพื่อคัดลอกไฟล์ใช้:

        <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 หมายถึงการแก้ไขสตริงดังนั้นฉันจะละเว้น<filtering>เพื่อป้องกันการเปลี่ยนแปลงที่ไม่ต้องการเช่นไฟล์สคริปต์ที่ใช้${...}ตัวแปร
Gerold Broser

20

ปลั๊กอินการพึ่งพา 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>

The dependency: copyเป็น documentend และมีเป้าหมายที่เป็นประโยชน์มากกว่าเช่นแกะ


3
ฉันไม่ได้ใช้ Ant เป็นเวลาหลายปีและฉันไม่ต้องการที่จะเริ่มทำมันเพื่อสิ่งง่าย ๆ ขอบคุณมากสำหรับคำตอบนี้
กุสตาฟ

18

สำหรับการที่ง่ายคัดลอกงานฉันสามารถขอแนะนำสำเนาการเปลี่ยนชื่อ-Maven ปลั๊กอิน มันตรงไปตรงมาและใช้งานง่าย:

<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 สำหรับการค้นหาข้อ จำกัด นี้)


2
แม้ว่าฉันจะชอบปลั๊กอินนี้มันน่าประหลาดใจที่ไม่สามารถคัดลอกไดเรกทอรี
james.garriss

3
@ james.garriss ฉันไม่ได้ตระหนักถึงข้อ จำกัด นี้ แต่น่าเสียดายที่คุณพูดถูก ฉันจะแก้ไขสิ่งนี้เป็นคำตอบของฉันเพื่อช่วยคนบางคนให้เวลาค้นหาด้วยตัวเอง
morten.c

7

วิธีแก้ปัญหาด้านบนนั้นง่ายที่สุดในการตั้งค่า แต่ฉันโชคดีที่ใช้ maven-upload-plugin จาก Atlassian ฉันไม่พบเอกสารที่ดีนี่เป็นวิธีที่ฉันใช้:

<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.host}" อ้างอิงด้านบนถูกกำหนดไว้ใน ~ / .m2 / settings.xml ของฉันและเปิดใช้งานโดยใช้โปรไฟล์ maven โซลูชันนี้ไม่ได้ จำกัด อยู่ที่ JBoss นี่คือสิ่งที่ฉันตั้งชื่อตัวแปรของฉัน ฉันมีโปรไฟล์สำหรับ dev ทดสอบและใช้ชีวิต ดังนั้นเพื่ออัปโหลดหูของฉันไปยังอินสแตนซ์ 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>
       ...

หมายเหตุ: Atlassian maven repo ที่มีปลั๊กอินนี้อยู่ที่นี่: https://maven.atlassian.com/public/

ฉันแนะนำให้ดาวน์โหลดแหล่งข้อมูลและดูเอกสารภายในเพื่อดูคุณสมบัติทั้งหมดที่ปลั๊กอินให้

`


5

Maven ไม่ควรทำสิ่งละเอียดได้ดีมันไม่ใช่ภาษาสคริปต์เช่นทุบตีหรือมดมันค่อนข้างจะเป็นการประกาศ - คุณพูดว่า - ฉันต้องการสงครามหรือหูและคุณได้มันมา อย่างไรก็ตามหากคุณต้องการปรับแต่งลักษณะของสงครามหรือหูให้ดูเหมือนว่าอยู่ข้างในคุณมีปัญหา มันไม่ได้เป็นเพียงขั้นตอนเช่นมด แต่เป็นการประกาศ นี่เป็นข้อดีในตอนแรกและอาจมีข้อเสียมากมายในตอนท้าย

ฉันคิดว่าแนวคิดเริ่มต้นคือการมีปลั๊กอินที่ดีว่า "เพิ่งทำงาน" แต่ความเป็นจริงจะแตกต่างกันถ้าคุณทำสิ่งที่ไม่ได้มาตรฐาน

หากคุณใช้ความพยายามอย่างเพียงพอในปอมและปลั๊กอินที่กำหนดเองไม่กี่ตัวคุณจะได้รับสภาพแวดล้อมการสร้างที่ดีขึ้นเช่นเดียวกับมด (ขึ้นอยู่กับโครงการของคุณแน่นอน


4

ผมเคยมีประสบการณ์ที่ดีมากกับการคัดลอก Maven ปลั๊กอิน มันมีไวยากรณ์ที่สะดวกและกระชับกว่าเมื่อเปรียบเทียบกับ maven-resources-plugin


8
น่าเสียดายที่ copy-maven-plugin เข้ากันไม่ได้กับ maven 3.1.x
Hakan

2
มีปัญหาในการติดตามความเข้ากันได้กับ maven 3.1: github.com/evgeny-goldin/maven-plugins/issues/10
koppor

ลืมเกี่ยวกับปลั๊กอินนี้ ... มองหา forks
Kukeltje

4

วิธีทั่วไปในการคัดลอกไฟล์โดยพลการคือการใช้Maven Wagon transport abstraction มันสามารถจัดการสถานที่ต่างๆผ่านทางโปรโตคอลชอบfile, HTTP, FTP, หรือSCPWebDAV

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คือมันถูกกำหนดให้ทำงานกับที่เก็บ Maven มันถือว่าโครงสร้างเฉพาะและเมตาดาต้า คุณจะเห็นว่าไฟล์นั้นอยู่ภายใต้foo/bar/1.0/file-1.0.extและไฟล์ checksum ถูกสร้างขึ้น ไม่มีทางรอบนี้

  • ปลั๊กอิน Wagon Maven

    ใช้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นั้น หรือสามารถผูกเข้ากับเฟส build โดยเฉพาะ


โปรดทราบว่าสำหรับโปรโตคอลที่ต้องการSCPทำงานคุณจะต้องกำหนดส่วนขยายในPOM:

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


หากปลายทางที่คุณกำลังคัดลอกจะต้องตรวจสอบข้อมูลประจำตัวที่สามารถให้บริการผ่านการตั้งค่าServer repositoryId/ serverIdส่งผ่านไปยังปลั๊กอินจะต้องตรงกับเซิร์ฟเวอร์ที่กำหนดไว้ในการตั้งค่า


3

ฉันสามารถสันนิษฐานได้ว่าคุณสมบัติ $ {project.server.config} ของคุณเป็นสิ่งที่กำหนดเองและอยู่นอกเลย์เอาต์ของไดเรกทอรีมาตรฐาน

ถ้าเป็นเช่นนั้นฉันจะใช้งานคัดลอก


สมมติว่าฉันใส่ใจที่จะวางไฟล์ลงในเลย์เอาต์ไดเรกทอรีมาตรฐาน Maven สามารถคัดลอกไปยังเป้าหมายตามที่ต้องการไม่ใช่ใน zip / jar หรือไม่?
Joshua Fox

2

อีกวิธีหนึ่งคือการรวมสิ่งเหล่านี้เป็นสิ่งประดิษฐ์โดยใช้ปลั๊กอินประกอบ จากนั้นคุณสามารถใช้ปลั๊กอินการพึ่งพาเพื่อคลายไฟล์เหล่านี้ตามที่คุณต้องการ นอกจากนี้ยังมีการคัดลอกเป้าหมายในปลั๊กอินการพึ่งพาเพื่อคัดลอกสิ่งประดิษฐ์


1

ฉันสามารถแยกแหล่งข้อมูลต่าง ๆ สำหรับคำตอบนี้:

...
<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>
...

จากนั้นรันคำสั่ง: (-X สำหรับการดีบัก)

mvn -X upload:upload


-1

เพื่อสรุปคำตอบที่ดีบางข้อด้านบน: Mavenถูกออกแบบมาเพื่อสร้างโมดูลและคัดลอกผลลัพธ์ไปยังที่เก็บ Maven การคัดลอกโมดูลไปยังไดเร็กทอรีการปรับใช้ / ติดตั้งจะต้องทำนอกบริบทของฟังก์ชันหลักของ Maven เช่นด้วยคำสั่งคัดลอก Ant / Maven


Ant เป็นฟังก์ชันหลักของ Mavenและ Wagon (เช่นปลั๊กอินที่อยู่รอบ ๆ นั้นไม่ใช่ปลั๊กอินหลักของ Maven อย่างเป็นทางการ)
เจอราลด์ Broser
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.