Maven ไม่สามารถแก้ไขการอ้างอิงไม่สามารถแก้ไขสิ่งประดิษฐ์ได้


136

นี่น่าจะเป็นโครงการทำงานจากเพื่อนของฉัน เขาสาธิตโครงการต่อหน้าฉันจากนั้นฉันก็คัดลอกโครงการนำเข้าเป็นโครงการ maven ที่มีอยู่ (ฉันใช้m2eclipseปลั๊กอิน)

จากนั้นข้อผิดพลาดนี้จะเกิดขึ้น ข้อผิดพลาดนี้สามารถเกิดซ้ำได้ทุกครั้งที่ฉันพยายามสร้างบางสิ่งด้วย maven

การพึ่งพา mvn: tree, dependency: list หรือ build package ตามปกติจะทำให้เกิดข้อผิดพลาดเดียวกัน

ข้อผิดพลาดจากการรันบิลด์ 'แพ็กเกจ' จาก eclipse คือ:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Jackpot Portal Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for javax.servlet:com.springsource.javax.servlet:jar:2.5.0 is missing, no dependency information available
[WARNING] The POM for javax.servlet:com.springsource.javax.servlet.jsp.jstl:jar:1.2.0 is missing, no dependency information available
[WARNING] The POM for javax.transaction:com.springsource.javax.transaction:jar:1.1.0 is missing, no dependency information available
[WARNING] The POM for org.slf4j:com.springsource.slf4j.log4j:jar:1.5.6 is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.963s
[INFO] Finished at: Tue Jan 11 01:55:41 WIT 2011
[INFO] Final Memory: 2M/56M
[INFO] ------------------------------------------------------------------------

[ERROR] Failed to execute goal on project jackpot: Could not resolve dependencies 
for project com.jeteo:jackpot:war:1.0-SNAPSHOT: The following artifacts could 
not be resolved: javax.servlet:com.springsource.javax.servlet:jar:2.5.0,
javax.servlet:com.springsource.javax.servlet.jsp.jstl:jar:1.2.0, 
javax.transaction:com.springsource.javax.transaction:jar:1.1.0, 
org.slf4j:com.springsource.slf4j.log4j:jar:1.5.6: Failure to find 
javax.servlet:com.springsource.javax.servlet:jar:2.5.0 in 
http://repository.springsource.com/maven/bundles/release was cached in the 
local repository, resolution will not be reattempted until the update 
interval of com.springsource.repository.bundles.release has elapsed or 
updates are forced -> [Help 1]

[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

และนี่คือเนื้อหาของpom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.jeteo</groupId>
    <artifactId>jackpot</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>Jackpot Portal Webapp</name>
    <url>http://www.jeteo.com</url>
    <properties>
        <java-version>1.6</java-version>
        <org.springframework-version>3.0.3.RELEASE</org.springframework-version>
        <org.hibernate-version>3.6.0.Final</org.hibernate-version>
        <org.aspectj-version>1.6.9</org.aspectj-version>
        <org.slf4j-version>1.5.10</org.slf4j-version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>net.sf.jt400</groupId>
            <artifactId>jt400</artifactId>
            <version>6.6</version>
            <scope>compile</scope>
        </dependency>

        <!-- Hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${org.hibernate-version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${org.hibernate-version}</version>
            <scope>compile</scope>
        </dependency>

        <!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjtools</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>com.springsource.javax.servlet</artifactId>
            <version>2.5.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>com.springsource.javax.servlet.jsp.jstl</artifactId>
            <version>1.2.0</version>
            <scope>provided</scope>
        </dependency>
        <!--
        <dependency>
         <groupId>javax.persistence</groupId>
         <artifactId>com.springsource.javax.persistence</artifactId>
         <version>1.0.0</version>
         <scope>compile</scope>
        </dependency>
        -->
        <dependency>
            <groupId>javax.transaction</groupId>
            <artifactId>com.springsource.javax.transaction</artifactId>
            <version>1.1.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.5.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>com.springsource.slf4j.log4j</artifactId>
            <version>1.5.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.11</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

    </dependencies>
    <repositories>
        <!-- Spring releases -->
        <repository>
            <id>com.springsource.repository.bundles.release</id>
            <name>Spring Maven Repository Repository</name>
            <url>http://repository.springsource.com/maven/bundles/release</url>
        </repository>
        <!-- For hibernate 3.6 support -->
        <repository>
            <id>jboss</id>
            <url>https://repository.jboss.org/nexus/content/groups/public/</url>
        </repository>
    </repositories>
    <build>
        <finalName>jackpot</finalName>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <version>1.1</version>
                <configuration>
                    <url>http://localhost:8080/manager</url>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

ฉันได้ลองดาวน์โหลด maven เวอร์ชันล่าสุดแล้วและรวมไว้ใน eclipse helios แต่ก็ยังคงเป็นปัญหาเดิม ข้อความแสดงข้อผิดพลาดเดียวกันนี้เกิดขึ้นแม้ว่าฉันจะเรียกใช้ในบรรทัดคำสั่งเชลล์ (นอก eclipse)

ฉันขาดอะไรไป?


ดูเส้นทางของคุณในตัวแปรระบบในกรณีของฉันเส้นทางสำหรับ maven 3 ถูกต้องในตัวแปรผู้ใช้ แต่หลังจากเปลี่ยนเส้นทางเป็น maven 2 ในตัวแปรระบบมันก็ใช้งานได้ดีไม่รู้ว่าทำไม
aastha

คำตอบ:


96

ดูเหมือนว่าคุณจะไม่มีที่เก็บ Maven บางส่วน ถามหาเพื่อนของ.m2/settings.xmlคุณและคุณอาจต้องการอัปเดต POM เพื่อรวมที่เก็บไว้ที่นั่น

- แก้ไข: หลังจาก googling อย่างรวดเร็วแล้วให้ลองเพิ่มสิ่งนี้ใน POM ของคุณ:

<repository>
    <id>com.springsource.repository.bundles.release</id>
    <name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases</name>
    <url>http://repository.springsource.com/maven/bundles/release</url>
</repository>
<repository>
    <id>com.springsource.repository.bundles.external</id>
    <name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
    <url>http://repository.springsource.com/maven/bundles/external</url>
</repository>

5
ขอบคุณ ! เพื่อนของฉันบอกว่ามันใช้งานได้ในแล็ปท็อปของเขาเพราะเขาได้รับการอ้างอิงที่แคชไว้ใน. m2 / และ maven ไม่ได้พยายามดาวน์โหลดอีกต่อไป และเขาแชร์รายการที่เก็บบางรายการก็เหมือนกับการค้นพบของคุณและตอนนี้มันก็ใช้งานได้ดีแล้ว .. ขอบคุณที่สละเวลา! และถ้าฉันรู้คุณใช้คีย์เวิร์ดอะไรเพื่อค้นหาว่าจะใช้ที่เก็บใด เมื่อวานนี้ฉันลองใช้ googling แต่ฉันก็ทุกข์ใจ haha
bertie

6
ฉันรู้ว่ามันเป็นปัญหาที่เก็บเนื่องจากข้อความเตือน "POM for xxx is missing" ดังนั้นฉันจึงค้นหาใน "springource maven" และได้มาพร้อมกับคำถามที่พบบ่อยของโปรเจ็กต์ springource และรายการสำหรับตั้งค่าให้ทำงานกับ Maven
wmorrell

ข้อผิดพลาดสิ่งประดิษฐ์แรกของเขาคือ com.springsource.javax.servlet ถ้ามีให้ทำไมมันถึงเกี่ยวข้องกับ setting.xml?
Philip Rego

@PhilipRego สามารถระบุรายชื่อพื้นที่เก็บข้อมูลภายนอกของคนมาตรฐานที่.m2/settings.xml repo.maven.apache.orgในกรณีนี้ JAR มาจากที่เก็บ SpringSource และไม่ได้อยู่ใน Maven Central ฉันสันนิษฐานว่าเพื่อนคนนั้นมี repos SpringSource ที่ระบุไว้ในโลคัล.m2/settings.xmlทำให้ไม่มีข้อผิดพลาดในการค้นหาเนื่องจากจะพบสิ่งประดิษฐ์ใน repos maven สำรอง แต่ JAR จะถูกแคชและไม่มีการค้นหาใด ๆ เกิดขึ้นเลย
wmorrell

1
@PhilipRego การอ้างอิงเหล่านี้ไม่ได้ถูกทำเครื่องหมายตามที่ระบุ แม้ว่าจะมีการระบุการอ้างอิง แต่ข้อกำหนดของอินเตอร์เฟสจะต้องคอมไพล์โค้ด นั่นหมายความว่าคุณต้องมีไฟล์ JAR ที่กำหนดอินเตอร์เฟสที่ใช้ สิ่งที่หมายถึงการอ้างอิงที่มีให้คือ JARs ไม่ได้รวมอยู่ในรหัสของคุณ
wmorrell

15

Maven เก็บไฟล์ของคุณไว้ในแคชและอย่าพยายามดาวน์โหลดอีกครั้ง คุณสามารถ 'ช่วย' เขาด้วยตนเองได้โดยการลบ.m2ไดเรกทอรีจากนั้นเพื่อนของเราจะดาวน์โหลดทุกอย่างผ่านการอ้างอิงแบบเก่า


7

ในฐานะที่เป็นอีกทางเลือกหนึ่งของปัญหาเดียวกันคำตอบนี้อ้างถึงการใช้ Maven 3 เทียบกับ Maven 2 เป็นสาเหตุที่เป็นไปได้ของปัญหานี้ ใกล้อย่างที่ฉันบอกได้นี่เป็นเพราะการเปลี่ยนแปลงความละเอียดของพื้นที่เก็บข้อมูลในเครื่องที่เปลี่ยนไปใน Maven 3 การใส่สิ่งนี้ไว้ที่นี่ในกรณีที่มีคนอื่น googles และได้รับคำตอบนี้ (เหมือนที่ฉันทำ)


7

artifactIdสำหรับการอ้างอิงทั้งหมดที่ล้มเหลวในการดาวน์โหลดที่ไม่ถูกต้อง - com.springsourceมีเหตุผลบางอย่างที่พวกเขาจะนำหน้าด้วย ตัด / วางปัญหา?

คุณสามารถลองเปลี่ยนได้ดังนี้

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>jta</artifactId>
    <version>1.1.0</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.5.6</version>
</dependency>

คุณอาจต้องการเพิ่มที่เก็บส่วนกลาง maven สำหรับอาร์ติแฟกต์เหล่านี้ในกรณีที่ไม่มีในที่เก็บที่ระบุ

<repository>
    <id>maven2</id>
    <url>http://repo1.maven.org/maven2</url>
</repository>

ฉันลองแล้ว แต่ยังผิดพลาดอยู่? นี่คือผลลัพธ์บางส่วนจาก eclipse หลังจากทำภารกิจแพ็คเกจ: ล้มเหลวในการดำเนินการเป้าหมายในโปรเจ็กต์แจ็คพอต: ไม่สามารถแก้ไขการอ้างอิงสำหรับโปรเจ็กต์ com.jeteo: jackpot: war: 1.0-SNAPSHOT: สิ่งประดิษฐ์ต่อไปนี้ไม่สามารถแก้ไขได้: javax.servlet: servlet-api: jar: 2.5.0, javax.servlet: jstl: jar: 1.2.0, javax.transaction: jta: jar: 1.1.0: ล้มเหลวในการค้นหา javax.servlet: servlet-api: jar: 2.5.0 ในrepository.springsource.com/maven/bundles/releaseถูกแคชไว้ในที่เก็บในเครื่องการแก้ปัญหาจะไม่ถูกพยายามอีกครั้งจนกว่าจะถึงช่วงเวลาอัปเดตของ <cutted> ....
เบอร์ตี้

@ อัลเบิร์ตคำ. คำตอบที่อัปเดตเพื่อรวมการอ้างอิงไปยังที่เก็บส่วนกลาง maven สำหรับสิ่งประดิษฐ์ที่หายไป
Raghuram

คำนำหน้า com.springsource หมายถึงสิ่งประดิษฐ์ที่จะมาจากพื้นที่เก็บข้อมูลขององค์กรในฤดูใบไม้ผลิ
EIS

6

ดาวน์โหลด jar ด้วยตนเองจากนั้นดำเนินการคำสั่งจากโฟลเดอร์ที่บันทึก jar:

mvn install:install-file -Dfile=*jar_file_name*.jar-DgroupId=*group_id* -DartifactId=*artifact_id* -Dversion=*version_no* -Dpackaging=jar

jar file, jar_file_name, group_id, artifact_idและversion_noที่มีอยู่จากหน้าพื้นที่เก็บข้อมูล Maven


4

ฉันมีปัญหาที่คล้ายกันและฉันแก้ไขโดยการเพิ่ม repos ด้านล่างใน pom.xml ของฉัน:

<repository>
    <id>org.springframework.maven.release</id>
    <name>Spring Maven Release Repository</name>
    <url>http://repo.springsource.org/libs-release-local</url>
    <releases><enabled>true</enabled></releases>
    <snapshots><enabled>false</enabled></snapshots>
</repository>
<!-- For testing against latest Spring snapshots -->
<repository>
    <id>org.springframework.maven.snapshot</id>
    <name>Spring Maven Snapshot Repository</name>
    <url>http://repo.springsource.org/libs-snapshot-local</url>
    <releases><enabled>false</enabled></releases>
    <snapshots><enabled>true</enabled></snapshots>
</repository>
<!-- For developing against latest Spring milestones -->
<repository>
    <id>org.springframework.maven.milestone</id>
    <name>Spring Maven Milestone Repository</name>
    <url>http://repo.springsource.org/libs-milestone-local</url>
    <snapshots><enabled>false</enabled></snapshots>
</repository>

4
mvn clean install -U

แก้ไขปัญหาของฉัน เนื่องจาก repos ถูกแคชฉันจึงต้องบังคับให้รับเวอร์ชันล่าสุด


2

ปัญหาประเภทนี้เกิดจากสองสาเหตุ:

  1. คาถาของการพึ่งพาไม่ถูกต้อง
  2. การกำหนดค่าของการตั้งค่า mvn (เช่น. ~ / .m2 / settings.xml) ผิด

หากสามารถดาวน์โหลดการอ้างอิงส่วนใหญ่ได้เหตุผล 1 อาจเป็นจุดบกพร่องที่เป็นไปได้มากที่สุด ในทางตรงกันข้ามหากการอ้างอิงส่วนใหญ่มีปัญหาคุณควรดู settings.xml

ฉันพยายามแก้ไขปัญหามาตลอดทั้งบ่ายและในที่สุดฉันก็ทำได้ ปัญหาของฉันเกิดขึ้นใน settings.xml ไม่สะกดแพ้หรือผิดของsettings.xmlแต่สูญเสียactiveProfiles


1

ฉันได้รับข้อความที่คล้ายกันและปัญหาของฉันคือการตั้งค่าพร็อกซีบางอย่างใน settings.xml ของฉัน ดังนั้นฉันจึงปิดการใช้งานและทุกอย่างก็ใช้ได้ดี


0

ฉันมีปัญหานี้ ในกรณีของฉันมันเกิดจาก IntelliJ Idea ไปยุ่งกับไฟล์ pom.xml บางไฟล์ (ซึ่งดูเหมือนจะสนุกกับการทำ!) ฉันเพิ่งเปลี่ยนกลับไปใช้สำเนาต้นฉบับและสิ่งต่างๆก็ใช้ได้อีกครั้ง!


0

ฉันมีปัญหานี้เช่นกันปรากฎว่าเป็นเพราะ NetBeans เพิ่มบางอย่างในไฟล์ pom.xml ของฉัน ตรวจสอบอีกครั้งว่าไม่มีการเพิ่มอะไรตั้งแต่การปรับใช้ที่ประสบความสำเร็จครั้งก่อน


0

โครงการหูของฉันมี 2 โมดูล * * * * * * * * .ear และ .war และฉันมีข้อผิดพลาดนี้อาศัยในโครงการเมื่อพยายาม*.war mvn eclipse:eclipseแก้ไขได้โดยแก้ไขปัญหาการเข้ารหัส utf-8 ใน*.warโปรเจ็กต์ mvn -Xหรือ-eทางเลือกที่ไม่สามารถช่วยได้ที่นี่


0

ปรากฎว่ามันเกิดขึ้นเพราะไฟร์วอลล์ในคอมพิวเตอร์ของฉัน การปิดใช้งานได้ผลสำหรับฉัน


1
ในขณะที่ปิดไฟร์วอลล์บนคอมพิวเตอร์ของคุณอาจทำงานได้ทั้งนี้ขึ้นอยู่กับการตั้งค่าเครือข่ายของคุณฉันขอแนะนำให้ค้นหาโซลูชันที่ปลอดภัยยิ่งขึ้นเช่นโดยการเพิ่มข้อยกเว้นสำหรับกระบวนการ maven หรือ maven central ... ดูเหมือนการตั้งค่าไฟร์วอลล์ที่กำหนดค่าไม่ถูกต้อง / เข้มงวดมาก ฉันว่า
ราศีมังกร

@ Capricorn ใช่นี่ไม่ใช่สิ่งที่ดีที่สุด แต่สำหรับฉันฉันลองใช้วิธีแก้ปัญหาทั้งหมดที่แนะนำและมันก็ใช้ได้ดีกับสิ่งนี้ หากคุณมีทางออกที่ดีกว่านี้โปรดบอกฉันขอบคุณ !!! แก้ไข: คุณพูดถึง "การเพิ่มข้อยกเว้นสำหรับกระบวนการ maven หรือ maven central" ฉันไม่เข้าใจจริงๆคุณสามารถระบุสิ่งเหล่านี้ ...
Duc Thanh

0

เจอปัญหาดังกล่าว ต้นเหตุคือโฟลเดอร์. m2 คุณต้องตรวจสอบให้แน่ใจว่าสิ่งที่คุณพยายามเข้าถึงมีอยู่ในโฟลเดอร์. m2 ของคุณ (นี่คือ repo ในเครื่องของคุณ) ถ้าของอยู่ตรงนั้นแสดงว่าคุณดี โดยปกติจะอยู่ในโฟลเดอร์ผู้ใช้ในระบบของคุณ (ไม่ว่าจะเป็น mac / linux หรือแม้แต่ windows)

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