Odpowiedzi:
Możesz dodać nowy katalog źródłowy za pomocą 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
element jest w /project/build/plugins
/project/build/pluginManagement/plugins
m2e connector for build-helper-maven-plugin
z Eclipse Marketplace, aby usunąć błąd w pom.xml
'build.plugins.plugin.version' for org.codehaus.mojo:build-helper-maven-plugin is missing
że musisz dodać w <plugin>
tagu<version>1.12</version>
Naiwnie robię to w ten sposób:
<build>
<finalName>osmwse</finalName>
<sourceDirectory>src/main/java, src/interfaces, src/services</sourceDirectory>
</build>
To zadziałało dla mnie
<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
- i być może dodatkowe sources
- jako katalogi źródłowe plików. W twoim rozwiązaniu maven-compiler-plugin
jest to jedyna wtyczka, która zna te rzeczywiste korzenie.
aby działało w intelliJ, możesz także dodać
<generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>
do wtyczki kompilatora maven
Działa to również z maven, definiując znacznik zasobów. Możesz nazywać nazwy folderów src, jak tylko chcesz.
<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
Działa to z maven 3.5.4, a teraz Intellij Idea widzi ten kod jako źródło:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>
</configuration>
</plugin>
Użyłem wtyczki build-helper-maven z posta i zaktualizowałem src / main / wygenerowano. A mvn clean compile działa na moim ../common/src/main/java lub na ../common, więc zachowałem to drugie. Tak, potwierdzając, że poziom kompilacji IntelliJ IDEA (wersja 10.5.2) nie powiódł się, jak wspomniał David Phillips. Problem polegał na tym, że IDEA nie dodała innego źródłowego katalogu głównego do projektu. Dodanie go ręcznie rozwiązało problem. To nie jest miłe, ponieważ edytowanie czegokolwiek w projekcie powinno pochodzić z raju, a nie z bezpośredniej edycji opcji projektu IDEA. Będę jednak mógł z nim żyć, dopóki nie będzie wspierał wtyczki build-helper-maven-plug, tak aby automatycznie dodawała źródła.
Potrzebowałem jednak innego obejścia, aby to zadziałało. Ponieważ za każdym razem, gdy IDEA ponownie importowała ustawienia maven po zmianie pom pom, nowo dodane źródło było przechowywane w module, ale traciło to wybór folderów źródłowych i było bezużyteczne. Więc dla IDEA - musisz ustawić je raz:
Teraz trzymanie tych folderów podczas importu nie jest najlepszą praktyką na świecie, ... ale daje szansę.
Chociaż odpowiedź z evokk jest zasadniczo poprawna, brakuje klas testowych . Musisz dodać klasy testowe z celem 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>
Można to zrobić w dwóch krokach:
${build.directory}
Jeśli pracujesz z uruchomioną Jetty ( jetty:run
), wówczas rekompilacja dowolnej klasy w dowolnym module (z Maven, IDEA lub Eclipse) doprowadzi do ponownego uruchomienia Jetty. Takie samo zachowanie uzyskasz dla zmodyfikowanych zasobów.
W konfiguracji możesz użyć <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>
są to wszystkie konfiguracje dostępne dla wersji kompilatora 3.8.1. Różne wersje mają różne konfiguracje, które można znaleźć, uruchamiając kod za -X
pomocą ogólnej komendy mvn. Lubić
mvn clean install -X
mvn compiler:compile -X
i wyszukiwanie za pomocą identyfikatora lub celu lub nazwy wtyczki Może to pomóc również w przypadku innych wtyczek. Eclipse, intelliJ może nie wyświetlać wszystkich konfiguracji jako sugestii.