Не удалось выполнить цель org.apache.maven.plugins:maven-jar-plugin:2.4:jar

Итак, я попытался пойти дальше и создать файл .ear для существующего проекта maven, а затем развернуть его на WebLogic server. Для того же я продолжил создание модулей WAR, JAR и EAR и выполнил для этого следующие шаги:

Right click на parent project, выберите new, выберите maven module, назовите его как projectnameJARModule и затем закончите wizard.

Проделал тот же процесс для создания модулей projectnameWARModule и projectnameEARModule. После того, как они были сделаны, я добавил модули WAR и JAR как dependencies к EAR module. Далее я установил maven modules по Right Clicking в папку projectnameWARModule и выбрал Run As - Maven Install. При этом я получаю следующую ошибку в консоли (полный журнал консоли ниже) -


T E S T S
-------------------------------------------------------
Running org.CADJARModule.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ CADJARModule ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] projectname ............................................... SUCCESS [  0.957 s]
[INFO] projectnameJARModule ...................................... FAILURE [ 33.425 s]
[INFO] projectnameWARModule Maven Webapp ......................... SKIPPED
[INFO] projectnameEARModule ...................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 34.806 s
[INFO] Finished at: 2015-12-01T18:16:20+05:30
[INFO] Final Memory: 9M/126M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.4:jar (default-jar) on project projectnameJARModule: Error assembling JAR: For artifact {org.glassfish.jersey.containers:jersey-container-servlet-core:null:jar}: The version cannot be empty. -> [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/MojoExecutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :projectnameJARModule

Любая идея, как мне избавиться от этого? Огромное спасибо

Ниже приводится pom.xml для Parent Module -

<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Project_name</groupId>
<artifactId>Project_name</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Project_name</name>
<build>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <inherited>true</inherited>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
    <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.4</version>
        <configuration>
        <warSourceDirectory>WebContent</warSourceDirectory>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
    </plugin>
    </plugins>
</build>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.jaxrs</groupId>
                <artifactId>jackson-jaxrs-json-provider</artifactId>
                <version>2.6.0</version>
        </dependency>
        <dependency>
                    <groupId>javax</groupId>
                    <artifactId>javaee-web-api</artifactId>
                    <version>7.0</version> <!-- Put here the version of your Java EE app, in my case 7.0 -->
                    <scope>provided</scope>
            </dependency>

          <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>javax.servlet-api</artifactId>
                    <version>3.1.0</version>
                    <scope>provided</scope>
            </dependency>

            <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>jstl</artifactId>
                    <version>1.2</version>
            </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
            <!-- artifactId>jersey-container-servlet</artifactId -->
        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-moxy</artifactId>
        </dependency>
        </dependencies>
    </dependencyManagement>


    <properties>
        <jersey.version>2.16</jersey.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <modules>
        <module>Project_nameJARModule</module>
        <module>Project_nameWARModule</module>
        <module>Project_nameEARModule</module>
    </modules>
</project>

Ниже приводится pom.xml для WAR Module-

    <?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>Projectname</groupId>
    <artifactId>Projectname</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>ProjectnameWARModule</groupId>
<artifactId>ProjectnameWARModule</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>ProjectnameWARModule Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <finalName>ProjectnameWARModule</finalName>
</build>
</project>

Ниже приведен pom.xml для моего модуля JAR -

    <?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>Project_Name</groupId>
    <artifactId>Project_Name</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>CADJARModule</groupId>
<artifactId>CADJARModule</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>CADJARModule</name>
<url>http://maven.apache.org</url>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
</dependencies>
</project>

person TheLuminor    schedule 01.12.2015    source источник
comment
У вас есть раздел dependencyManagement в вашем родительском или модуле POM? Объявлена ​​ли зависимость jersey-container-servlet-core в обоих из них? Если да, то какая версия тоже заявлена?   -  person A_Di-Matteo    schedule 01.12.2015
comment
попробуйте mvn clean install -X и посмотрите, даст ли он вам больше информации об ошибке. Также поделитесь с вами pom.   -  person StackFlowed    schedule 01.12.2015
comment
jersey-container-servlet-core:null:jar в вашем pom.xml (родительском или одном из модулей) эта зависимость не имеет тега версии. Добавить связанный тег версии или определить как управляемую зависимость   -  person HRgiger    schedule 01.12.2015
comment
@A.DiMatteo Эй, у меня есть раздел. Я разместил файл pom.xml, пожалуйста, посмотрите   -  person TheLuminor    schedule 01.12.2015
comment
StackFlowed Я использую Eclipse, поэтому еще не пробовал. Постараюсь выложить обновление.   -  person TheLuminor    schedule 01.12.2015
comment
@HRgiger, вы правы, у него нет тега версии. Какую версию я должен добавить в tag хотя`?   -  person TheLuminor    schedule 01.12.2015
comment
@HRgiger Я пытался добавить тег версии с версией 2.22.1, но все равно получаю ту же ошибку?   -  person TheLuminor    schedule 01.12.2015
comment
Вы также определяете еще один раздел dependenciesManagement в модуле jar? Вы определяете соответствующую зависимость в разделе зависимостей модуля jar?   -  person A_Di-Matteo    schedule 01.12.2015
comment
Нет, я не определяю еще один dependenciesManagement в модуле jar. Я вставляю pom.xml для модулей jar и war в вопрос для вашей справки.   -  person TheLuminor    schedule 01.12.2015
comment
Таким образом, вы не используете какую-либо зависимость раздела dependenciesManagement в своих модулях. Также обратите внимание, что модуль JAR должен иметь зависимость от модуля JAR, чтобы правильно включить его. Кроме того, намеренно ли модуль JAR имеет другого родителя, чем модуль WAR? Таким образом, информация, которую вы разместили, не является полной.   -  person A_Di-Matteo    schedule 01.12.2015
comment
@TheLuminor А.Ди Маттео дает хороший ответ. Чтобы выбрать версию, вы можете обратиться к: search.maven.org/ , если вы работаете в команде, я бы не стал выбирать сам и спросил человека, который использовал этот модуль, если версия важна   -  person HRgiger    schedule 01.12.2015
comment
Нет, родитель один и тот же в обоих случаях. Это просто то, что я забыл изменить перед тем, как опубликовать это на сайте. Извиняюсь, мой плохой. :) @А.ДиМаттео   -  person TheLuminor    schedule 01.12.2015
comment
Можете ли вы запустить зависимость mvn:tree -Dincludes=org.glassfish.jersey.containers из модуля Jar и посмотреть, откуда она берется? Можете ли вы также запустить обычную сборку, используя флаги -e -X? Вы должны получить некоторые дополнительные подробности тогда.   -  person A_Di-Matteo    schedule 01.12.2015


Ответы (1)


Поясню: раздел dependencyManagement обеспечивает управление зависимостями для того же POM, где он определен, и для дочерних/модульных проектов Maven. Однако объявление зависимости в разделе dependencyManagement не означает, что Maven будет ее использовать, это просто подсказка на случай, если Maven будет ее использовать, так что, если в разделе dependencies отсутствует определенная версия, Maven будет искать ее в разделе dependencyManagement. . Если ничего не найдено, будет сгенерирована ошибка (Maven не может знать, какую версию разрешить для определенной зависимости).

Следовательно, хорошо иметь раздел dependencyManagement для управления, но он всегда должен определять версии каждой зависимости, иначе это будет упущенной возможностью и сделает вашу сборку более подверженной ошибкам.

Если вам нужны все объявленные зависимости и только в рамках одного и того же объявляющего POM, то вы можете вообще не иметь раздела dependenciesManagement и просто иметь свой раздел dependencies, предоставляющий версии для каждой объявленной зависимости.

В этом случае вы используете раздел dependenciesManagement в своем родительском POM (я вижу, что у него есть модули), затем вы должны проверить, объявлена ​​ли в модуле jar такая же зависимость (если требуется), иначе она не будет использоваться во время его сборки . Кроме того, вы также должны проверить, объявлен ли другой раздел dependenciesManagement в соответствующем модуле, и повторно объявить ту же зависимость снова без версии.

Некоторую дополнительную помощь могут оказать:

  • Запуск сборки Maven с использованием флагов -e -X
  • Бег mvn dependency:tree -Dincludes=<concerned_group_id_here>
  • Последний вариант изменения, запустите сборку как mvn dependency:purge-local-repository clean install, что может работать в случае поврежденного кеша (хотя ошибка должна быть другой)
person A_Di-Matteo    schedule 01.12.2015
comment
модуль JAR больше не имеет никакой зависимости. И я не требую, чтобы кто-то там был. Другого раздела DependenciesManagement тоже нет. Я использую eclipse и пытаюсь запустить. В любом случае я мог бы получить вывод дерева зависимостей через eclipse? Какие у меня сейчас варианты? @А. Ди Маттео - person TheLuminor; 02.12.2015
comment
Ну, я до сих пор не смог решить проблему, но просто из любопытства, как только я успешно создам модули и они будут установлены, как мне продолжить процесс разработки? Куда мне добавить все мои .jsp's и javascript's? В модуле .war? И затем я продолжаю делать чистую установку parent project? Так должно быть? - person TheLuminor; 02.12.2015