maven сборка, выбрасывающая stackoverflowerror - PullRequest
10 голосов
/ 07 сентября 2011

Привет обитатели stackoverflow,

У меня проблема с maven, особенно на этапе сборки. У меня есть большой многомодульный унаследованный проект, который, к сожалению, имеет несколько циклических ссылок в своих подмодулях. Он был модернизирован для сборки с Maven, но для рефакторинга циклических ссылок потребуется слишком много времени.

Проект строится нормально при запуске mvn install и даже запускает пакет mvn без проблем, но завершается неудачно при запуске сборки пакета mvn: сборка. Попытка запустить его со сборкой: сингл выдает ошибку сборки из-за «Ошибка создания дистрибутива архива сборки: необходимо указать хотя бы один файл».

При сборке: сборка, кажется, обрабатывает одни и те же библиотеки снова и снова, в конечном итоге выбрасывая stackoverflowerrorror. Я предполагаю, что это означает, что причиной этого являются циклические ссылки в модулях, хотя, поскольку он компилируется без проблем, я надеялся, что он также выживет при сборке.

Есть ли другие причины этого?

Структура проекта следующая:

Parent
 |_ Child1
 |_ Child2
 |_ dist-proj

Родительский пом состоит из следующих разделов:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2.1</version>
    <configuration>
        <descriptors>
            <descriptor>src/main/assembly/assembly-dependencies.xml</descriptor>
        </descriptors>
    </configuration>
</plugin>
<modules>
    <module>Child1</module>
    <module>Child2</module>
    <module>dist-proj</module>
</modules>

Дистанционный проект:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2.1</version>
    <executions>
        <execution>
            <id>dist-proj</id>
            <phase>assembly</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <descriptors>
                    <descriptor>src/main/assembly/assembly-dependencies.xml</descriptor>
                </descriptors>
            </configuration>
        </execution>
    </executions>
</plugin>

и файл сборки:

<moduleSets>
    <moduleSet>
    <useAllReactorProjects>true</useAllReactorProjects>
    <includes>
        <include>groupid:Child1</include>
        <include>groupid:Child2</include>
     </includes>
          <binaries>
             <outputDirectory>${project.build.finalName}</outputDirectory>
             <unpack>false</unpack>
             <dependencySets>
                <dependencySet>
                   <includes/>
                   <scope>compile</scope>
                </dependencySet>
                <dependencySet>
                   <includes/>
                   <scope>runtime</scope>
                   <useTransitiveFiltering>true</useTransitiveFiltering>
                </dependencySet>
             </dependencySets>
       </binaries>
    </moduleSet>
</moduleSets>

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

15 голосов
/ 21 октября 2011

Я также столкнулся с этой ошибкой. Рассматривая исходный код Plexus Archiver, метод hasNext, возвращаемый getResources в AbstractArchiver, вызывает себя каждый раз, когда сталкивается с классом или артефактом, который уже видел. Это приводит к тому, что ему не хватает места в стеке даже в проектах среднего размера.

На данный момент самый простой способ исправить это - увеличить пространство в стеке с помощью MAVEN_OPTS, например

export MAVEN_OPTS=-Xss2m

Подробнее см. http://jira.codehaus.org/browse/MASSEMBLY-549

1 голос
/ 07 сентября 2011

Чтобы создать только банку, которая содержит все зависимости, вы можете просто использовать предопределенный дескриптор .

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <descriptorRefs>
           <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>
...