Почему компиляция maven не работает с типом упаковки pom

Я не знаю, почему моя сборка maven не генерирует цели/классы в текущих настройках pom, в моем случае тип упаковки должен быть «pom», пожалуйста, сообщите, что не так... Спасибо!

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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.abc.sm.doctor</groupId>
<artifactId>smdoctor</artifactId>
<packaging>pom</packaging>
<version>${SMDOCTOR_VERSION}</version>
<name>sm doctor</name>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
    <plugins>   
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
                <debug>true</debug>
                <debuglevel>source,lines</debuglevel>
                <showDeprecation>true</showDeprecation>
                <archive>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <appendAssemblyId>false</appendAssemblyId>         
                <finalName>smdoctor</finalName> 
                <descriptors>
                    <descriptor>dist.xml</descriptor>
                    <descriptor>zip.xml</descriptor>
                </descriptors>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.7</version>
    <executions>
      <execution>
        <id>attach-artifacts</id>
        <phase>package</phase>
        <goals>
          <goal>attach-artifact</goal>
        </goals>
        <configuration>
          <artifacts>
            <artifact>
              <file>target/smdoctor.zip</file>
              <type>zip</type>
            </artifact>
          </artifacts>
        </configuration>
      </execution>
    </executions>
  </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>...</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <version>2.3.1</version>
        </plugin>
    </plugins>
</build>
<dependencies>
    ... 
     </dependencies>


person Even    schedule 16.08.2011    source источник


Ответы (3)


Установив тип упаковки на pom, вы указываете, что ничего не должно компилироваться. Может быть, pom не подходит для этого артефакта? Похоже, ваш скрипт будет нормально работать как jar.

person ddso    schedule 16.08.2011
comment
Вы правы, нет проблем с jar как типом упаковки, но мне почему-то нужно использовать pom, могу ли я каким-то образом принудительно компилировать ?? - person Even; 16.08.2011
comment
Похоже, вы делаете что-то неправильно в Maven, потому что, если вам нужна упаковка pom, это означает, что обычно у вас есть многомодульная сборка в корне, но корень не должен создавать банку. Если вам нужно создать банку, чем использовать банку типа упаковки... - person khmarbaise; 16.08.2011

Плагин компилятора не привязан к какой-либо фазе жизненного цикла maven с помощью упаковки pom. Вам нужно будет настроить execution так же, как вы сделали для плагина сборки:

<executions>
    <execution>
        <id>compile</id>
        <phase>compile</phase>
        <goals>
             <goal>compile</goal>
        </goals>
    </execution>
</executions>

Если ваши источники находятся в папке, отличной от src/main/java, вам нужно будет настроить эту папку в разделе сборки вашего pom:

<build>
    <sourceDirectory>${basedir}/path/to/sources</sourceDirectory>
    <!-- plugins and other configuration -->
</build>
person Jörn Horstmann    schedule 16.08.2011
comment
Все еще не повезло, получил это: [INFO] [compiler:compile {execution: compile}] [INFO] Нет исходников для компиляции, с какой стати нет исходников для компиляции?? - person Even; 16.08.2011
comment
Ваши источники находятся в src/main/java? В противном случае вам нужно было бы установить элемент sourceDirectory под build в правильный каталог. - person Jörn Horstmann; 16.08.2011

Пакет pom предназначен только для того, чтобы позволить другим модулям наследовать общие и обычные конфигурации, такие как плагины, зависимости, участники, разработчики и т. д. для дочерних модулей. Просто помните, что дальше фазы проверки дело не пойдет.

Эта упаковка является логичной, а не реальной, поэтому вы не должны помещать на этот уровень какой-либо реальный код или ресурсы. Если вы используете junit, скажем, в 5 дочерних модулях, поэтому вместо определения зависимости в 5 файлах pom вы можете просто сделать это в родительском pom с упаковкой pom, и вы все равно можете указать конкретную версию в своем модуле, если хотите переопределить то, что в родительском пом. Когда вы запускаете родительский pom, выполнение pom начинается с родительского к дочернему, а затем все зависимости извлекаются сверху вниз.

Вот как я понимаю упаковку помпонов. Итак, если у вас есть код с такой упаковкой, это означает, что структура вашего проекта maven нуждается в изменении. Используйте только упаковку pom в качестве общей конфигурации только между несколькими модулями.

person Community    schedule 11.09.2013