1

サーバーバックエンドモジュールとクライアントフロントエンドモジュールの両方を備えたMavenプロジェクトがあります。目標は、サーバーのバックエンドモジュールでJDK 7のパフォーマンスの向上を活用することですが、クライアントモジュールはJDK6でのみ構築します。クライアントモジュールはTomcatで実行されますが、サーバーモジュールは個別のJavaアプリケーションです。

特定のJDKをターゲットとするMaven構成を認識しています。

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
          <compilerVersion>1.6</compilerVersion>
          <fork>true</fork>
        </configuration>
      </plugin>
    </plugins>
  </build>

このアプローチの注意点の1つは、サーバーモジュールとクライアントモジュールの両方で使用される共通モジュールがあり、モジュールごとに2つの異なるバイナリ(JDK 6および7)が必要になることです。

JDK 6のアーティファクトの1つのセット、JDK 7のアーティファクトの別のセット、およびJDK 6と7の両方のアーティファクトの3番目のセット(両方で使用)をすべて同じプロジェクトに属するようにコンパイルするにはどうすればよいですか?モジュールを3つの別々のプロジェクトに分割する必要がありますか?

4

2 に答える 2

0

bmarguliesの答えは非常に適切です。

とにかく、実際にいくつかのモジュール(1.6と1.7)の異なるバージョンを構築したい場合は、2つのプロファイルを使用することをお勧めします。profile1はjdk6をターゲットとし、profile2はjdk7をターゲットにします。したがって、両方のプロファイルがmaven-compiler-pluginを再定義します。

両方のプロファイルで、異なる分類子を使用してmaven-jar-pluginを再定義し、各モジュールを2つのバージョンで使用できるようにすることもできます(依存関係で分類子を使用して、クライアントがjdk6を使用し、サーバーがjdk7を使用するようにします)。

これを行う方法の詳細については、別の質問があります。さまざまなプロファイルを使用してアーティファクト/Mavenアーティファクトを管理する方法

于 2013-03-16T07:27:37.047 に答える
0

<target> 1.6の場合、結果のJarは1.6および1.7で完全に正常に機能します。2回コンパイルする必要はありません。

1.7コンパイラを使用したり、1.7バイトコードをターゲットにしたりしても、パフォーマンス上の利点はありません(おそらく非常にあいまいな場合を除く)。すべてのパフォーマンスはJVMに存在します。共通コードをターゲット1.6にするだけです。1.7でコンパイルすることによる速度の利点を自分で測定できない限り、気にしないでください。

于 2013-03-16T01:32:34.423 に答える