Maven с помощью нескольких каталогов src

Есть ли способ скомпилировать несколько исходных каталогов java в одном проекте maven?

Ответ 1

Вы можете добавить новый исходный каталог с помощью build-helper:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/main/generated</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Ответ 2

Я наивно делаю это так:

<build>
  <finalName>osmwse</finalName>
  <sourceDirectory>src/main/java, src/interfaces, src/services</sourceDirectory>
</build>

Ответ 3

Это сработало для меня

<build>
    <sourceDirectory>.</sourceDirectory>
    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
        <includes>
            <include>src/main/java/**/*.java</include>
            <include>src/main2/java/**/*.java</include>
        </includes>
        </configuration>
        </plugin>
    </plugins>
</build>

Ответ 4

чтобы заставить его работать в intelliJ, вы также можете добавить

<generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>

в maven-compiler-plugin

Ответ 5

Это также работает с maven, определяя тег ресурсов. Вы можете назвать имена своих src, как вам нравится.

    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.java</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>

        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.java</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>

        <resource>
            <directory>src/main/generated</directory>
            <includes>
                <include>**/*.java</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>

Ответ 6

Использовал build-helper-maven-plugin из пост-и update src/main/сгенерированный. И mvn clean compile работает на моем.. /common/src/main/java или на.. /common, поэтому сохранил последний. Тогда да, подтверждая, что уровень компиляции IntelliJ IDEA (ver 10.5.2) не удался, как упомянул Дэвид Филлипс. Проблема заключалась в том, что IDEA не добавила в проект другого корня источника. Добавление вручную решает проблему. Это не приятно, поскольку редактирование чего-либо в проекте должно происходить из maven, а не из прямого редактирования параметров проекта IDEA. Тем не менее я смогу жить с ним, пока они не поддержат build-helper-maven-plugin напрямую, чтобы он автоматически добавлял источники.

Тогда понадобилось другое обходное решение, чтобы сделать эту работу. Поскольку каждый раз, когда IDEA повторно импортировал настройки maven после изменения pom, я недавно добавил источник в модуль, но он потерял исходные папки и был бесполезен. Так что для IDEA - нужно установить их один раз:

  • Выбрать - Настройки проекта/Maven/Импортировать/сохранить источник и проверить папки на reimport.
  • Добавить - Структура проекта/Параметры проекта/Модули/{Модуль}/Источники/Добавить Корень содержимого.

Теперь сохранение этих папок при импорте не является лучшей практикой в ​​мире либо..., но и дает ей попробовать.

Ответ 7

Это можно сделать в два этапа:

  • Для каждого исходного каталога вы должны создать собственный модуль.
  • Во всех модулях вы должны указать один и тот же каталог сборки: ${build.directory}

Если вы работаете с запущенным Jetty (jetty:run), перекомпиляция любого класса в любом модуле (с Maven, IDEA или Eclipse) приведет к перезапуску Jetty. Такое же поведение вы получите для измененных ресурсов.

Ответ 8

В конфигурации вы можете использовать <compileSourceRoots>.

oal:          org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-cli)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <basedir default-value="${basedir}"/>
  <buildDirectory default-value="${project.build.directory}"/>
  <compilePath default-value="${project.compileClasspathElements}"/>
  <compileSourceRoots default-value="${project.compileSourceRoots}"/>
  <compilerId default-value="javac">${maven.compiler.compilerId}</compilerId>
  <compilerReuseStrategy default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
  <compilerVersion>${maven.compiler.compilerVersion}</compilerVersion>
  <debug default-value="true">${maven.compiler.debug}</debug>
  <debuglevel>${maven.compiler.debuglevel}</debuglevel>
  <encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding>
  <executable>${maven.compiler.executable}</executable>
  <failOnError default-value="true">${maven.compiler.failOnError}</failOnError>
  <failOnWarning default-value="false">${maven.compiler.failOnWarning}</failOnWarning>
  <forceJavacCompilerUse default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
  <fork default-value="false">${maven.compiler.fork}</fork>
  <generatedSourcesDirectory default-value="${project.build.directory}/generated-sources/annotations"/>
  <maxmem>${maven.compiler.maxmem}</maxmem>
  <meminitial>${maven.compiler.meminitial}</meminitial>
  <mojoExecution default-value="${mojoExecution}"/>
  <optimize default-value="false">${maven.compiler.optimize}</optimize>
  <outputDirectory default-value="${project.build.outputDirectory}"/>
  <parameters default-value="false">${maven.compiler.parameters}</parameters>
  <project default-value="${project}"/>
  <projectArtifact default-value="${project.artifact}"/>
  <release>${maven.compiler.release}</release>
  <session default-value="${session}"/>
  <showDeprecation default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
  <showWarnings default-value="false">${maven.compiler.showWarnings}</showWarnings>
  <skipMain>${maven.main.skip}</skipMain>
  <skipMultiThreadWarning default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
  <source default-value="1.6">${maven.compiler.source}</source>
  <staleMillis default-value="0">${lastModGranularityMs}</staleMillis>
  <target default-value="1.6">${maven.compiler.target}</target>
  <useIncrementalCompilation default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
  <verbose default-value="false">${maven.compiler.verbose}</verbose>
</configuration>

это все конфигурации, доступные для версии 3.8.1 плагина компилятора. Различные версии имеют разные конфигурации, которые вы можете найти, запустив ваш код с -X после общей команды mvn. подобно

mvn clean install -X
mvn compiler:compile -X

поиск по идентификатору, цели или названию плагина. Это может помочь и с другими плагинами. Eclipse, intelliJ может показывать не все конфигурации в качестве предложений.