207

単一のMavenプロジェクトで複数のJavaソースディレクトリをコンパイルする方法はありますか?

4

10 に答える 10

291

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>
于 2008-11-06T22:01:36.780 に答える
44

これは私のために働いた

<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>
于 2008-11-06T21:51:31.340 に答える
20

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>
于 2012-02-22T12:53:27.750 に答える
9

これは、resources タグを定義することで 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>
于 2013-08-17T01:39:48.753 に答える
2

投稿の build-helper-maven-plugin を使用し、src/main/generated を更新しました。そして、mvn clean compile は私の ../common/src/main/java または ../common で動作するので、後者を維持しました。それから、はい、David Phillips が述べたように、コンパイルの IntelliJ IDEA (ver 10.5.2) レベルが失敗したことを確認します。問題は、IDEA が別のソース ルートをプロジェクトに追加しなかったことです。手動で追加すると問題が解決しました。プロジェクト内の編集は、IDEA のプロジェクト オプションを直接編集するのではなく、maven から行う必要があるため、好ましくありません。それでも、ソースを自動追加するように build-helper-maven-plugin を直接サポートするまで、私はそれと一緒に暮らすことができます。

その後、この作業を行うには別の回避策が必要でした。Pom の変更後に IDEA が Maven 設定を再インポートするたびに、新しく追加されたソースがモジュールに保持されていましたが、ソース フォルダーの選択が失われ、役に立ちませんでした。したがって、IDEA の場合 - これらを一度設定する必要があります。

  • [プロジェクト設定] / [Maven] / [インポート] / [再インポート時にソースとテスト フォルダーを保持] を選択します。
  • 追加 - プロジェクト構造 / プロジェクト設定 / モジュール / {モジュール} / ソース / コンテンツ ルートの追加。

これらのフォルダーをインポート時に保持することは、世界でもベスト プラクティスではありませんが、試してみてください。

于 2011-11-11T08:32:07.293 に答える
1

これは、次の 2 つの手順で実行できます。

  • 各ソース ディレクトリに対して、独自のモジュールを作成する必要があります。
  • すべてのモジュールで、同じビルド ディレクトリを指定する必要があります。${build.directory}

起動された Jetty ( ) で作業する場合jetty:run、任意のモジュール (Maven、IDEA、または Eclipse を使用) 内の任意のクラスを再コンパイルすると、Jetty が再起動されます。変更されたリソースに対して得られるのと同じ動作です。

于 2013-02-16T17:44:55.893 に答える
1

構成では、使用できます<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

ID、目標、またはプラグイン名で検索します。これは他のプラグインでも役立つ場合があります。Eclipse、intelliJ は、すべての構成を提案として表示しない場合があります。

于 2019-07-07T14:54:13.927 に答える