有没有一种方法可以在一个maven项目中编译多个java源目录?
这对我很有效
<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>
你可以用build-helper添加一个新的源目录:
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.2.0</version> <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>
然后需要另一种变通方法来实现这一工作。由于每次IDEA在pom更改后重新导入maven设置,我新添加的源代码都保留在模块上,但它失去了源文件夹的选择,并且毫无用处。所以对于IDEA -需要设置这些一次:
现在把这些文件夹保存在导入状态也不是世界上最好的做法……,但试一试。
为了让它在intelliJ中工作,你还可以通过这种方式将generatedSourcesDirectory添加到编译器插件:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory> </configuration> </plugin>
这可以分两步完成:
${build.directory}
如果你使用已启动的Jetty (jetty:run),那么重新编译任何模块中的任何类(使用Maven、IDEA或Eclipse)将导致Jetty重新启动。对于修改后的资源,您将获得相同的行为。
jetty:run
通过定义资源标记,这也适用于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>
我很天真地这样做:
<build> <finalName>osmwse</finalName> <sourceDirectory>src/main/java, src/interfaces, src/services</sourceDirectory> </build>
在配置中,你可以使用<compileSourceRoots>。
<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版本的编译插件可用的所有配置。不同的版本有不同的配置,你可以通过在通用mvn命令后运行-X来找到你的代码。就像
-X
mvn clean install -X mvn compiler:compile -X
和搜索id或目标或插件名称 这可能对其他插件也有帮助。Eclipse, intelliJ可能不会显示所有配置作为建议
这适用于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>
<execution> <phase>generate-sources</phase> <goals> <goal>add-test-source</goal> </goals> <configuration> <sources> <source>target/generated/some-test-classes</source> </sources> </configuration> </execution>