Как да разбера бурканите, от които зависят зависимостите в pom.xml на maven?

Много ме интересува как мога да разбера кои са бурканите, от които зависят зависимостите в pom.xml на maven.

Свикнал съм сам да добавям библиотеки (jar) в моя проект за уеб приложение. Попаднах на тази нужда, когато се опитвах да конфигурирам пробите Spring 3.0. Наистина не харесвам, че всичко трябва да минава през maven с spring 3.0.x. На този етап изглежда, че не мога да копая по-дълбоко в лабиринта на зависимостите на maven и научаването му изглежда като задължително. Но наистина ще съм благодарен, ако някой може да ми каже начин, по който мога да намеря тази информация.

Например, за следния pom.xml бих искал да знам от какво зависи зависимостта с artifactId spring-context. (Виждам, че зависи от Commons-logging, тъй като създателят на извадката го изключва - искаше да използва slf4j вместо Commons-logging.). Бих искал да разбера останалите зависимости за зависимостта с artifactId spring-context и същото за останалите зависимости! Как мога да направя това?

<?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>org.springframework.samples</groupId>
<artifactId>mvc-ajax</artifactId>
<name>mvc-ajax</name>
<packaging>war</packaging>
<version>1.0.0-SNAPSHOT</version>
<properties>
    <org.springframework.version>3.0.5.RELEASE</org.springframework.version>
    <org.slf4j.version>1.6.1</org.slf4j.version>
</properties>
<dependencies>

    <!--  Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${org.springframework.version}</version>
        <exclusions>
            <!-- Exclude Commons Logging in favor of SLF4j -->
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
             </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>

    <!-- Logging -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${org.slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${org.slf4j.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${org.slf4j.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
        <scope>runtime</scope>
    </dependency>

    <!--  JSR 303 with Hibernate Validator -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.1.0.Final</version>
    </dependency>

    <!--  Joda Time -->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>1.6.2</version>
        <scope>runtime</scope>
    </dependency>

    <!-- Jackson JSON Mapper -->
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.6.4</version>
    </dependency>

    <!-- Servlet -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <!-- Test -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.7</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${org.springframework.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<repositories>
    <!-- For Hibernate Validator -->
    <repository>
        <id>org.jboss.repository.release</id>
        <name>JBoss Maven Release Repository</name>         
<url>https://repository.jboss.org/nexus/content/repositories/releases</url>
        <snapshots><enabled>false</enabled></snapshots>         
    </repository>       
</repositories>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
                <showWarnings>true</showWarnings>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>install</id>
                    <phase>install</phase>
                    <goals>
                        <goal>sources</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
</project>

С уважение,
Деспот

РЕДАКТИРАНЕ (някои продължават отговора, даден от Шон):
1) Изтеглете maven (изтеглих версия 2.2.1) и следвайте инструкциите за инсталиране, дадени там.
2) След това отворете командния ред и отидете в директорията на pom.xml
3) Направете командата "mvn dependency:tree", както е препоръчано. (Опитах да използвам -DoutputFile="somePath" или -Dinclude=spring-context -> не пишеше във файла, представен в пътя, и избираше всички зависимости вместо spring-context - без значение общата команда ще достатъчно). Изчакайте известно време системата да изтегли цялата необходима информация и накрая ще получите нещо подобно:

[INFO] [dependency:tree {execution: default-cli}]
[INFO] org.springframework.samples:mvc-ajax:war:1.0.0-SNAPSHOT
[INFO] +- org.springframework:spring-context:jar:3.0.5.RELEASE:compile
[INFO] |  +- org.springframework:spring-aop:jar:3.0.5.RELEASE:compile
[INFO] |  |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  +- org.springframework:spring-beans:jar:3.0.5.RELEASE:compile
[INFO] |  +- org.springframework:spring-core:jar:3.0.5.RELEASE:compile
[INFO] |  +- org.springframework:spring-expression:jar:3.0.5.RELEASE:compile
[INFO] |  \- org.springframework:spring-asm:jar:3.0.5.RELEASE:compile
[INFO] +- org.springframework:spring-webmvc:jar:3.0.5.RELEASE:compile
[INFO] |  +- org.springframework:spring-context-support:jar:3.0.5.RELEASE:
      compile
[INFO] |  \- org.springframework:spring-web:jar:3.0.5.RELEASE:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.6.1:compile
[INFO] +- org.slf4j:jcl-over-slf4j:jar:1.6.1:runtime
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.1:runtime
[INFO] +- log4j:log4j:jar:1.2.16:runtime
[INFO] +- javax.validation:validation-api:jar:1.0.0.GA:compile
[INFO] +- org.hibernate:hibernate-validator:jar:4.1.0.Final:compile
[INFO] +- joda-time:joda-time:jar:1.6.2:runtime
[INFO] +- org.codehaus.jackson:jackson-mapper-asl:jar:1.6.4:compile
[INFO] |  \- org.codehaus.jackson:jackson-core-asl:jar:1.6.4:compile
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided
[INFO] +- javax.servlet.jsp:jsp-api:jar:2.1:provided
[INFO] +- javax.servlet:jstl:jar:1.2:compile
[INFO] +- junit:junit:jar:4.7:test
[INFO] \- org.springframework:spring-test:jar:3.0.5.RELEASE:test
[INFO] ---------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ---------------------------------------------------------------
[INFO] Total time: 1 minute 8 seconds
[INFO] Finished at: Tue Jan 04 16:53:45 CET 2011
[INFO] Final Memory: 12M/25M
[INFO] ---------------------------------------------------------------

Можете да изтеглите бурканите с помощта на Jarvana (просто въведете jarvana + името на буркана) или можете да използвате командата svn checkout.

Hibernate-validator:jar:4.1.0.Final в Jarvana връща грешка (няма окончателна версия 4.1.0 -> само 4.0.2 Final
Също така org.codehaus.jackson-mapper-asl 1.6.4 може не се намира - само 1.6.2 (същото важи и за jackson-core-asl).Предполагам, че същото ще се случи, ако използвате maven за изграждане на вашия проект.

След като включих всички необходими буркани, стартирах сървъра в режим на отстраняване на грешки и това се случи:

TIME org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\somePath\mvc-ajax3.0\WEB-INF\lib\jsp-api-2.1.jar) - jar not loaded. 
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/jsp/JspPage.class
TIME org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\somePath\mvc-ajax3.0\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded. 
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

Това означава (мисля), че тези буркани са намерени два пъти. Изтриването им свърши работа за мен. Шевове като pom.xml не са валидни за тази проба.

Отне ми твърде много време да изтегля бурканите ръчно и да се „боря“ с цялата конфигурация на проекта, така че предполагам, че е най-добре да научите малко Maven, ако се опитвате да започнете с Spring 3.0.


person despot    schedule 04.01.2011    source източник


Отговори (2)


Изпълнете mvn dependency:tree и той ще изброи всички зависимости на проекта.

Справка:

person Sean Patrick Floyd    schedule 04.01.2011
comment
Благодаря Шон! Работех по въпроса до сега. Успях да намеря зависимостите и да ги изтегля с помощта на jarvana (може да се направи чрез команден ред с помощта на команда svn checkout). За повече написах и раздел РЕДАКТИРАНЕ в моя въпрос! - person despot; 04.01.2011

Не споменахте каква IDE използвате. Ако използвате Eclipse, инсталирайте плъгина M2Eclipse за Maven. Веднъж инсталиран, той има отличен редактор на Maven pom.xml, който може да ви покаже много неща...включително интерактивно, рекурсивно дърво на зависимостите.

Можете да видите няколко видеоклипа за тази функция тук:

http://m2eclipse.sonatype.org/overview-of-the-m2eclipse-pom-editor.html

person HDave    schedule 04.01.2011
comment
Здравей HDave, хубави функции - проверих го! Но срещнах проблеми с POM редактора (мисля) - вижте това: stackoverflow.com/questions/4604316/. Благодаря за вашият отговор. - person despot; 05.01.2011