Компилятор Maven2 пользовательский исходный каталог выполнения и целевой каталог

Стек является частью памяти, которой можно управлять с помощью нескольких ключевых инструкций по ассемблеру, таких как 'поп' (удалите и возвратите значение от стека), и 'нажатие' (продвиньте значение к стеку), но также и вызов (назовите подпрограмму - это продвигает адрес возвращаться к стеку) и возврат (возврат из подпрограммы - это выталкивает адрес прочь стека и переходов к нему). Это - регион памяти ниже регистра указателя вершины стека, который может быть установлен по мере необходимости. Стек также используется для передающих аргументов подпрограммам, и также для сохранения значений в регистрах перед называнием подпрограмм.

"куча" является частью памяти, которая дана приложению операционной системой, обычно через syscall как malloc. На современных Ose эта память является рядом страниц, к которым только обработка вызовов имеет доступ.

размер стека определяется во времени выполнения и обычно не растет после запусков программы. В программе C стек должен быть достаточно большим для содержания каждой переменной, объявленной в каждой функции. "Куча" вырастет динамично по мере необходимости, но ОС в конечном счете выполняет вызов (это будет часто выращивать "кучу" больше, чем значение, которое требует malloc, так, чтобы по крайней мере некоторое будущее mallocs не должно было возвращаться к ядру для получения большей памяти. Это поведение часто настраиваемо)

, поскольку Вы выделили стек прежде, чем запустить программу, Вам никогда не нужно к malloc, прежде чем можно будет использовать стек, таким образом, это - небольшое преимущество там. На практике очень трудно предсказать то, что будет быстро и что будет медленным в современных операционных системах, которые имеют подсистемы виртуальной памяти, потому что то, как страницы реализованы и где они хранятся, является деталью реализации.

11
задан Paul Keeble 14 August 2009 в 13:54
поделиться

2 ответа

Исходные каталоги устанавливаются вне подключаемого модуля компилятора внутри элемента , поэтому это не сработает.

Вы можете использовать подключаемый модуль build-helper-maven-plugin add-source и add-test-source , чтобы указать дополнительные исходные каталоги для ваших интеграционных тестов, но это не удалит существующие исходные каталоги.

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.3</version>
    <executions>
      <execution>
        <id>add-it-source</id>
        <phase>pre-integration-test</phase>
        <goals>
          <goal>add-source</goal>
        </goals>
        <configuration>
          <sources>
            <source>${basedir}/src/inttest/java</source>
          </sources>
        </configuration>
      </execution>
    </executions>
  </plugin>

Если вы привяжите цель add-test-source к запуску непосредственно перед целью testCompile , ваши интеграционные тесты будут включены. Обратите внимание, вы хотите, чтобы они выводились в целевые / тестовые классы, чтобы надежный плагин их обнаружил.

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

9
ответ дан 3 December 2019 в 08:30
поделиться

После дополнительных исследований становится очевидным, что это на самом деле невозможно в Maven 2, как я Если хотите, для внедрения интеграционных тестов необходим какой-то хакер. Хотя вы можете добавлять дополнительные каталоги (как предлагает Rich Seller), нет плагина для удаления других источников или для компиляции каталога отдельно от основной компиляции.

Лучшее решение, которое я нашел для добавления интеграционных тестов, - это сначала использовать подключаемый модуль build helper для добавления каталога inttest, который будет скомпилирован как тесты.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>add-test-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-test-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>src/inttest/java</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

Теперь, чтобы заставить интеграционные тесты выполняться на этапе интеграции-тестирования, вам нужно использовать исключаемые и включаемые для управления при их запуске, как показано ниже . Это позволяет использовать любые пользовательские параметры, которые могут вам понадобиться (в моем случае агент добавляется через argline).

<plugin>
<groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
    <excludes>
        <exclude>**/itest/**</exclude>
    </excludes>
    </configuration>
<executions>
    <execution>
        <id>inttests</id>
        <goals>
            <goal>test</goal>
        </goals>
        <phase>integration-test</phase>
        <configuration>
            <excludes><exclude>none</exclude></excludes>
            <includes>
                <include>**/itest/**/*Test.java</include>
            </includes>
        </configuration>
    </execution>
</executions>
</plugin>
5
ответ дан 3 December 2019 в 08:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: