33 votes

Problème d'artefact Maven 3

J'ai créé un nouveau projet struts dans eclipse en utilisant le struts2-archtype-starter.

Quelques erreurs se trouvaient déjà dans mon projet avant de faire quoi que ce soit. J'ai résolu la plupart d'entre elles mais il y en a une qui me pose encore des problèmes.

Missing artifact com.sun:tools:jar:1.5.0:system pom.xml

J'ai essayé d'ajouter manuellement tools.jar à mon dépôt mais cela n'a pas résolu le problème.

Mon pom ressemble à ceci

<?xml version="1.0" encoding="UTF-8" ?>

<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.divespot</groupId>
    <artifactId>website</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>E-Divespot diving community</name>
    <url>http://www.e-divespot.com</url>
    <description>A website to support divers from all around the world.</description>

    <dependencies>
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>

        <!--  Struts 2 -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.0.11.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-sitemesh-plugin</artifactId>
            <version>2.0.11.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.0.11.2</version>
        </dependency>

        <!-- Servlet & Jsp -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- Jakarta Commons -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.1.1</version>
        </dependency>

        <!-- Dwr -->
        <dependency>
            <groupId>uk.ltd.getahead</groupId>
            <artifactId>dwr</artifactId>
            <version>1.1-beta-3</version>
        </dependency>
    </dependencies>

    <build>
      <finalName>website</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                   <source>1.6</source>
                   <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.5</version>
                <configuration>
                    <scanIntervalSeconds>10</scanIntervalSeconds>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

45voto

John Vint Points 19804

L'erreur que vous rencontrez est probablement due au fait que votre chemin JAVA_HOME n'est pas correctement configuré. Vous voyez quelque chose comme C:\{directories to jre}\..\lib\tools.jar ?

Vous pouvez faire démarrer eclipse en utilisant votre JDK intégré en modifiant le fichier eclipse.ini et en ajoutant quelque chose comme

-vm
C:\{directories to JDK}\bin\javaw.exe

Ce que j'ai appris, c'est qu'Eclipse utilise par défaut votre système jre pour démarrer Eclipse. Vous avez probablement vu un message au démarrage d'eclipse similaire à "Eclipse tourne sous un JRE et m2eclipse nécessite un JDK ; certains plugins ne fonctionneront pas".

Si vous allez dans (dans eclipse) Aide -> Détails de l'installation et cherchez un -vm, vous verrez probablement qu'il pointe vers un endroit qui n'a pas la structure de chemin qu'il attend.

Note : Pour une raison quelconque, lorsque j'ai rencontré ce problème, java.home dans maven a été évalué à partir de l'endroit où eclipse a été lancé. Ainsi, lorsqu'il essaie de tirer le tools.jar à partir de ce qu'il considère comme java.home, il se peut que ce ne soit pas ce que vous avez réellement défini comme JAVA_HOME dans une variable env/système.

10voto

Thamizharasu Points 96
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>${struts2.version}</version>
    <exclusions>
        <exclusion>
            <artifactId>tools</artifactId>
            <groupId>com.sun</groupId>
        </exclusion>
    </exclusions>
</dependency>

3voto

bmargulies Points 49855

Vous ne pouvez pas utiliser tools.jar depuis un dépôt.

Malheureusement, quelque chose dans votre arbre de dépendance pense que vous le pouvez. Vous devez donc utiliser un "excludes" pour vous débarrasser de la dépendance existante, puis la remplacer par ce qui suit.

Si vous faites en sorte que la version ci-dessous corresponde à celle du message d'erreur, vous n'aurez peut-être pas besoin des "exclusions".

Vous avez besoin :

  <profiles>
    <profile>
      <id>default-tools.jar</id>
      <activation>
        <property>
          <name>java.vendor</name>
          <value>Sun Microsystems Inc.</value>
        </property>
      </activation>
      <dependencies>
        <dependency>
          <groupId>com.sun</groupId>
          <artifactId>tools</artifactId>
          <version>whatever</version>
          <scope>system</scope>
          <systemPath>${java.home}/../lib/tools.jar</systemPath>
        </dependency>
      </dependencies>
    </profile>

2voto

Michael Lemke Points 232

Je dois ajouter une autre réponse. Après avoir mis à niveau m2e vers la version 1.4.20130601-0317, l'erreur est revenue. Encore une fois, aucune des solutions proposées n'a fonctionné, y compris celle que je viens de proposer. Finalement, j'ai trouvé le coupable : l'inclusion de org.htmlparser:1.6 avait une dépendance implicite à l'égard de tools.jar . Je n'ai aucune idée de la raison pour laquelle la suppression des jre's installés a aidé avec l'ancien m2e (1.0.quelque chose). Maintenant la solution est d'exclure tools.jar :

    <dependency>
        <groupId>org.htmlparser</groupId>
        <artifactId>htmlparser</artifactId>
        <version>1.6</version>
        <exclusions>
            <exclusion>
                <artifactId>tools</artifactId>
                <groupId>com.sun</groupId>
            </exclusion>
        </exclusions>
    </dependency>

1voto

Michael Lemke Points 232

Ayant eu le même problème récemment, aucune des solutions ci-dessus n'a fonctionné pour moi. Je suis tombé sur http://blog.samratdhillon.com/archives/598 et j'ai pensé que c'était le Bogue d'Eclipse qui y sont mentionnés.

J'ai dû supprimer toutes les installations jre de la configuration d'Eclipse (Window -> Preferences -> Java -> Installed JREs) et ne garder qu'un seul jdk. Après cela, maven a fonctionné parfaitement sans aucune modification à eclipse.ini ou quoi que ce soit d'autre. Ceci est avec Ecplise Indigo Service Release 1.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X