maven ต้องการการเชื่อมต่ออินเทอร์เน็ตในบางจุดเพื่อให้สามารถใช้งานได้หรือไม่? ความหมายโดยเฉพาะการรับปลั๊กอิน maven ภายในสำหรับการรวบรวมทำความสะอาดบรรจุภัณฑ์ ฯลฯ ?
maven ต้องการการเชื่อมต่ออินเทอร์เน็ตในบางจุดเพื่อให้สามารถใช้งานได้หรือไม่? ความหมายโดยเฉพาะการรับปลั๊กอิน maven ภายในสำหรับการรวบรวมทำความสะอาดบรรจุภัณฑ์ ฯลฯ ?
คำตอบ:
คุณสามารถเรียกใช้ Maven mvn -o install
ในโหมดออฟไลน์ แน่นอนว่าอาร์ติแฟกต์ใด ๆ ที่ไม่มีในที่เก็บในเครื่องของคุณจะล้มเหลว Maven ไม่ได้ระบุไว้ในที่เก็บแบบกระจาย แต่แน่นอนว่ามันทำให้สิ่งต่างๆราบรื่นยิ่งขึ้น ด้วยเหตุนี้ร้านค้าจำนวนมากจึงใช้กระจกภายในที่ซิงค์กับ repos ส่วนกลางทีละน้อย
นอกจากนี้ยังmvn dependency:go-offline
สามารถใช้เพื่อให้แน่ใจว่าคุณได้ติดตั้งการอ้างอิงทั้งหมดไว้ในเครื่องก่อนที่คุณจะเริ่มทำงานแบบออฟไลน์
หากคุณมีพีซีที่เข้าถึงอินเทอร์เน็ตใน LAN ของคุณคุณควรติดตั้งที่เก็บ Maven ในเครื่อง
ผมขอแนะนำให้Artifactory โอเพนซอร์ส นี่คือสิ่งที่เราใช้ในองค์กรของเรามันง่ายมากในการติดตั้ง
Artifactory ทำหน้าที่เป็นพร็อกซีระหว่างเครื่องมือสร้างของคุณ (Maven, Ant, Ivy, Gradle เป็นต้น) และโลกภายนอก
มันแคชสิ่งประดิษฐ์ระยะไกลเพื่อที่คุณจะได้ไม่ต้องดาวน์โหลดซ้ำแล้วซ้ำอีก
โดยจะบล็อกคำขอภายนอกที่ไม่ต้องการ (และบางครั้งก็มีความอ่อนไหวด้านความปลอดภัย) สำหรับสิ่งประดิษฐ์ภายในและควบคุมวิธีการและสถานที่ที่จะใช้งานอาร์ติแฟกต์และโดยใคร
หลังจากตั้งค่า Artifactory แล้วคุณเพียงแค่ต้องเปลี่ยน Maven settings.xml
ในเครื่องพัฒนา:
<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<mirrors>
<mirror>
<mirrorOf>*</mirrorOf>
<name>repo</name>
<url>http://maven.yourorganization.com:8081/artifactory/repo</url>
<id>repo</id>
</mirror>
</mirrors>
<profiles>
<profile>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>http://maven.yourorganization.com:8081/artifactory/libs-release</url>
</repository>
<repository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshot</name>
<url>http://maven.yourorganization.com:8081/artifactory/libs-snapshot</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>plugins-release</name>
<url>http://maven.yourorganization.com:8081/artifactory/plugins-release</url>
</pluginRepository>
<pluginRepository>
<snapshots />
<id>snapshots</id>
<name>plugins-snapshot</name>
<url>http://maven.yourorganization.com:8081/artifactory/plugins-snapshot</url>
</pluginRepository>
</pluginRepositories>
<id>artifactory</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>artifactory</activeProfile>
</activeProfiles>
</settings>
เราใช้วิธีนี้เนื่องจากเรามีปัญหาในการเข้าถึงอินเทอร์เน็ตในเครื่องพัฒนาของเราและสิ่งประดิษฐ์บางอย่างดาวน์โหลดไฟล์ที่เสียหายหรือไม่ได้ดาวน์โหลดเลย เราไม่ได้มีปัญหาตั้งแต่
คุณมีสองทางเลือกสำหรับสิ่งนี้:
1. ) ทำการเปลี่ยนแปลงในsettings.xmlเพิ่มสิ่งนี้ในแท็กแรก
<localRepository>C:/Users/admin/.m2/repository</localRepository>
2. ) ใช้แท็ก -o สำหรับคำสั่งออฟไลน์
mvn -o clean install -DskipTests=true
mvn -o jetty:run
Maven ต้องการการอ้างอิงในที่เก็บในเครื่องของคุณ วิธีที่ง่ายที่สุดในการเข้าถึงคือการเข้าถึงอินเทอร์เน็ต (หรือยากกว่าโดยใช้โซลูชันอื่นที่ให้ไว้ที่นี่)
สมมติว่าคุณสามารถเข้าถึงอินเทอร์เน็ตได้ชั่วคราวคุณสามารถเตรียมออฟไลน์ได้โดยใช้ปลั๊กอิน maven-dependency ที่มีการพึ่งพา:เป้าหมายออฟไลน์ สิ่งนี้จะดาวน์โหลดการอ้างอิงโปรเจ็กต์ทั้งหมดของคุณไปยังที่เก็บในเครื่องของคุณ (แน่นอนว่าการเปลี่ยนแปลงในการอ้างอิง / ปลั๊กอินจะต้องมีการเข้าถึงอินเทอร์เน็ต / ที่เก็บส่วนกลางใหม่)
น่าเศร้าที่
dependency:go-offline
ไม่ได้ผลสำหรับฉันเพราะมันไม่ได้แคชทุกอย่างเช่น ไฟล์ POMs และอื่น ๆ ที่กล่าวถึงการอ้างอิงโดยปริยาย
วิธีแก้ปัญหาคือระบุตำแหน่งที่เก็บโลคัลไม่ว่าจะภายในsettings.xml
ไฟล์ที่มี<localRepository>...</localRepository>
หรือโดยรันmvn
ด้วย-Dmaven.repo.local=...
พารามิเตอร์ หลังจากสร้างโปรเจ็กต์เริ่มต้นแล้วอาร์ติแฟกต์ที่จำเป็นทั้งหมดควรถูกแคชจากนั้นคุณสามารถอ้างอิงตำแหน่งที่เก็บได้ด้วยวิธีเดียวกันในขณะที่รัน Maven build ในโหมดออฟไลน์ ( mvn -o ...
)
ก่อนที่จะออฟไลน์คุณต้องตรวจสอบให้แน่ใจว่าทุกอย่างอยู่ใน repo ในพื้นที่ของคุณซึ่งจำเป็นในขณะทำงานแบบออฟไลน์ การเรียกใช้ "mvn dependency: go-offline" สำหรับโปรเจ็กต์ / pom (s) ที่คุณตั้งใจจะดำเนินการจะช่วยลดความพยายามในการบรรลุเป้าหมายนี้
แต่โดยปกติแล้วจะไม่ใช่เรื่องราวทั้งหมดเนื่องจากการพึ่งพา: ออฟไลน์จะดาวน์โหลดเฉพาะปลั๊กอิน "bare build" เท่านั้น (การใช้งานออฟไลน์ / ปลั๊กอินแก้ไขไม่ได้แก้ปัญหาการพึ่งพาปลั๊กอินทั้งหมด ) ดังนั้นคุณต้องหาวิธีดาวน์โหลดปลั๊กอิน deploy / test / site (และอื่น ๆ ) และการอ้างอิงลงใน repo ของคุณ
นอกจากนี้การพึ่งพา: go-offline ไม่ดาวน์โหลดสิ่งประดิษฐ์ pom´s เองดังนั้นคุณต้องพึ่งพา: คัดลอกถ้าจำเป็น
บางครั้ง - ตามที่ MaDa เขียน - คุณไม่รู้ว่าคุณต้องการอะไรในขณะออฟไลน์ซึ่งทำให้เป็นไปไม่ได้เลยที่จะมี repo ที่ "เพียงพอ"
อย่างไรก็ตามการมี repo ที่เติมเต็มอย่างถูกต้องคุณจะต้องเพิ่ม "<offline> true </offline>" ใน Maven´s settings.xml เพื่อออฟไลน์
อย่าเปลี่ยนโปรไฟล์ Maven (id) ที่คุณใช้เติม repo ของคุณในขณะออฟไลน์ Maven รับรู้อาร์ติแฟกต์ที่ดาวน์โหลดมาในข้อมูลเมตาด้วย "ข้อมูลประจำตัว" ซึ่งเชื่อมโยงกับ ID โปรไฟล์
หากคุณกำลังใช้ IntelliJ คุณก็สามารถไปที่การตั้งค่า -> รูปร่าง, การดำเนินการปรับใช้ -> เครื่องมือรูปร่าง -> Mavenและตรวจสอบ / ยกเลิกการทำงานแบบออฟไลน์
สิ่งนี้เหมาะกับคุณหรือไม่?
http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html
อย่าลืมเพิ่มลงในที่เก็บปลั๊กอินของคุณและชี้ url ไปที่ใดก็ได้ที่เก็บของคุณ
<repositories>
<repository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>local</id>
<url>file://D:\mavenrepo</url>
</pluginRepository>
</pluginRepositories>
หากไม่เป็นเช่นนั้นคุณอาจต้องเรียกใช้เซิร์ฟเวอร์ภายในเช่น apache บนเครื่องของคุณ
(ที่มา: jfrog.com )
หรือ
เพียงแค่ใช้เซิร์ฟเวอร์ที่เก็บ Maven เช่น Sonatype Nexus http://www.sonatype.org/nexus/หรือ JFrog Artifactory https://www.jfrog.com/artifactory/
หลังจากนักพัฒนารายหนึ่งสร้างโปรเจ็กต์แล้วการสร้างโดยนักพัฒนารายต่อไปมิฉะนั้น Jenkins CI จะไม่ต้องการการเข้าถึงอินเทอร์เน็ต
เซิร์ฟเวอร์ที่เก็บ Maven ยังสามารถกำหนดค่าพร็อกซีเพื่อเข้าถึง Maven Central (หรือที่เก็บสาธารณะที่จำเป็นมากกว่า) และสามารถมีรายการสิ่งประดิษฐ์ที่ถูก cynch'ed ในที่เก็บระยะไกล
ประสบการณ์ของฉันแสดงให้เห็นว่าตัวเลือก -o ทำงานไม่ถูกต้องและเป้าหมายออฟไลน์ยังไม่เพียงพอที่จะอนุญาตการสร้างออฟไลน์แบบเต็ม:
วิธีแก้ปัญหาที่ฉันสามารถตรวจสอบได้รวมถึงการใช้--legacy-local-repository
ตัวเลือก maven แทนที่จะเป็น-o
(ออฟไลน์) และการใช้ที่เก็บในเครื่องแทนที่เก็บการแจกจ่าย
นอกจากนี้ฉันต้องคัดลอกทุกmaven-metadata-maven2_central.xml
ไฟล์ของ local-repo ลงในmaven-metadata.xml
แบบฟอร์มที่ maven คาดไว้
ตอบคำถามของคุณโดยตรง: ไม่จำเป็นต้องเชื่อมต่ออินเทอร์เน็ต แต่เข้าถึงที่เก็บบน LAN หรือดิสก์ภายใน (ใช้คำแนะนำจากบุคคลอื่นที่โพสต์ที่นี่)
หากโปรเจ็กต์ของคุณไม่ได้อยู่ในช่วงสุกงอมนั่นหมายความว่าเมื่อ POM มีการเปลี่ยนแปลงค่อนข้างบ่อยโหมดออฟไลน์จะไม่สามารถใช้งานได้จริงเนื่องจากคุณจะต้องอัปเดตที่เก็บของคุณค่อนข้างบ่อยเช่นกัน เว้นแต่คุณจะได้รับสำเนาของที่เก็บที่มีทุกสิ่งที่คุณต้องการ แต่คุณจะรู้ได้อย่างไร? โดยปกติคุณจะเริ่มต้นที่เก็บตั้งแต่เริ่มต้นและจะถูกโคลนทีละน้อยในระหว่างการพัฒนา (บนคอมพิวเตอร์ที่เชื่อมต่อกับที่เก็บอื่น) สำเนาของที่เก็บสาธารณะ repo1.maven.org มีน้ำหนักหลายร้อยกิกะไบต์ดังนั้นฉันจึงไม่แนะนำให้ใช้กำลังดุร้ายเช่นกัน
ในการเตรียมตัวก่อนทำงานออฟไลน์เพียงแค่เรียกใช้
mvn dependency:go-offline
ปลั๊กอินใหม่ดูเหมือนจะแก้ไขข้อบกพร่องของmvn dependency:go-offline
:
https://github.com/qaware/go-offline-maven-plugin
เพิ่มใน pom mvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependencies
ของคุณทำงานแล้ว เมื่อคุณตั้งค่าการอ้างอิงแบบไดนามิกทั้งหมดแล้ว maven จะไม่พยายามดาวน์โหลดอะไรอีก (จนกว่าคุณจะอัปเดตเวอร์ชัน)
<offline> false </offline>
<localRepository>${user.home}/.m2/repository</localRepository>
ถึง
<offline> true <offline>
<localRepository>${user.home}/.m2/repository</localRepository>
เปลี่ยนแท็กออฟไลน์จากเท็จเป็นจริง
จะดาวน์โหลดจาก repo ออนไลน์