Я включил проект как зависимость в другой проект. В maven package включенная зависимость не компилируется как jar, но создается пустая папка.

Проекты:

main-test (packaging: jar)
main-webservice (packaging: war)

Проект main-web service включает банку с пом.

Основной тест pom.xml:

<?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>

    <groupId>de.main</groupId>
    <artifactId>test</artifactId>
    <packaging>jar</packaging>
</project>

Основной веб-сервис 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>de.main</groupId>
    <artifactId>ws</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

<dependencies>
    <dependency>
        <groupId>de.main</groupId>
        <artifactId>test</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies>
<build><plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
            </plugin>
</plugins></build>
</project>

Зависимости тестового проекта разрешаются внутри проекта веб-службы, поэтому стихотворение кажется правильным.

В любом случае, если я запустил «mvn package», ресурсы main-webservices компилируются для целевой, но папка libs содержит другую папку с именем main-test-1.0.jar. НО это папка, а не запакованная банка.

Что здесь могло быть не так? Как я могу упаковать проект как jar, а не как папку?

0
membersound 26 Мар 2014 в 20:17
Я никогда не видел, чтобы это произошло раньше. Вам, вероятно, нужно будет опубликовать больше ваших помпонов, проблема явно не в крошечном фрагменте, который вы предоставили.
 – 
Gimby
26 Мар 2014 в 20:34
См. мое обновление выше. Что я заметил: когда я перехожу к просмотру библиотек maven в eclipse моего проекта main-webservice, зависимость main-test также включается не как jar, а как папка.
 – 
membersound
26 Мар 2014 в 20:42
В Eclipse это нормально, его «разрешение рабочей области», которое делает это. По сути, это способ Eclipse сообщить вам, что это зависимость, управляемая другим проектом в рабочей области.
 – 
Gimby
26 Мар 2014 в 20:43
«включенная зависимость не компилируется как jar» -> Maven никогда не компилирует зависимости. Он просто берет их такими, какие они есть, и либо помещает их в путь к классам, либо копирует в WAR. Но это никогда не меняет артефакт.
 – 
Aaron Digulla
26 Мар 2014 в 20:45

2 ответа

Лучший ответ

включенная зависимость не компилируется как jar

Maven никогда не компилирует зависимости. Он просто принимает их такими, какие они есть, и либо помещает их в путь к классам, либо копирует их в WAR. Но это никогда не меняет артефакт.

Это также означает, что зависимость должна быть в вашем локальном репо (где-то ниже ~/.m2/repository/), иначе Maven будет недоволен (= завершится с ошибкой).

Примечание: у Maven нет большой памяти. Он всегда может держать только один модуль в его крошечном мозгу. В Eclipse вы можете добавить еще один проект в путь сборки, но Maven не может этого сделать. Для правильной работы Maven вы должны установить все зависимости в локальном репо.

1
Aaron Digulla 26 Мар 2014 в 20:47
Хм хорошо. Итак, когда я запускаю «mvn package» в своем проекте веб-сервиса, есть ли шанс сообщить maven автоматически install упомянутые проекты открытой рабочей области в репо?
 – 
membersound
26 Мар 2014 в 20:48

Идея:

  • Проверьте, существует ли банка в вашем репозитории

  • Убедитесь, что проект jar в eclipse не упоминается в военном проекте в пути сборки Java.

  • Сделайте это без плагина eclipse mvn:

    mvn eclipse: clean (для обоих проектов)

    mvn eclipse: eclipse (для обоих проектов)

    mvn clean install (для обоих проектов)

0
Emilien Brigand 26 Мар 2014 в 20:42
Хм, файл не существует в репозитории maven .m2, так как я хочу, чтобы мне не приходилось напрямую install jar в хранилище. Я просто хочу, чтобы его нашел и построил maven, поскольку у меня открыты оба проекта в моей рабочей области.
 – 
membersound
26 Мар 2014 в 20:44