Ответы:
Вы можете добавить новый исходный каталог с помощью 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>
plugin
элемент в, /project/build/plugins
а не в/project/build/pluginManagement/plugins
m2e connector for build-helper-maven-plugin
с рынка eclipse, чтобы устранить ошибку в pom.xml
'build.plugins.plugin.version' for org.codehaus.mojo:build-helper-maven-plugin is missing
вам нужно добавить в <plugin>
тег<version>1.12</version>
Я наивно так поступаю
<build>
<finalName>osmwse</finalName>
<sourceDirectory>src/main/java, src/interfaces, src/services</sourceDirectory>
</build>
Это сработало для меня
<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>
sourceDirectory
- и, возможно, дополнительные sources
- в качестве корней исходных файлов. В вашем решении, maven-compiler-plugin
единственный плагин знает об этих фактических корнях.
чтобы он работал в intelliJ, вы также можете добавить
<generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>
в maven-компилятор-плагин
Это также работает с 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>
Resources are not (usually) code. They are not compiled
Это работало для maven 3.5.4, и теперь Intellij Idea видит этот код в качестве источника:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>
</configuration>
</plugin>
Использовал build-helper-maven-plugin из поста - и обновил src / main / generate. И mvn clean compile работает на моем ../common/src/main/java или на ../common, поэтому сохранил последнее. Тогда да, подтверждая, что уровень компиляции IntelliJ IDEA (версия 10.5.2) не удался, как упоминал Дэвид Филлипс. Проблема заключалась в том, что IDEA не добавлял в проект другой источник root. Добавление его вручную решило проблему. Это нехорошо, так как редактирование чего-либо в проекте должно происходить от maven, а не от прямого редактирования опций проекта IDEA. Тем не менее, я буду в состоянии жить с ним, пока они не будут напрямую поддерживать build-helper-maven-plugin, так что он будет автоматически добавлять исходники.
Тогда нужен был другой обходной путь, чтобы сделать эту работу все же. Так как каждый раз, когда IDEA повторно импортировал настройки maven после смены pom, вновь добавленный источник сохранялся в модуле, но он терял выбор папок источника и был бесполезен. Так что для ИДЕИ - нужно установить их один раз:
Сохранение этих папок при импорте также не является лучшей практикой в мире, ... но стоит попробовать.
Хотя ответ от evokk в основном правильный, в нем отсутствуют тестовые классы . Вы должны добавить тестовые классы с целью add-test-source :
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>target/generated/some-test-classes</source>
</sources>
</configuration>
</execution>
Это можно сделать в два этапа:
${build.directory}
Если вы работаете с запущенным Jetty ( jetty:run
), то перекомпиляция любого класса в любом модуле (с Maven, IDEA или Eclipse) приведет к перезапуску Jetty. То же самое поведение вы получите для измененных ресурсов.
В конфигурации вы можете использовать <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 может показывать не все конфигурации в качестве предложений.