2012-03-19 7 views
6

日食、Mavenを...問題の- 私は最近、それは(私たちは考えて)持つべき時にいずれかのコンパイルエラーをスローせず、当社の展開サイクルを通してそれを作るいくつかのコードに刺された

コードされて使用して新しい静的メソッドInteger.compareはJava 1.7以降です。

サーバー環境はJava 1.6で実行されます。私たちの開発環境にはJava 1.7がインストールされています。

プロジェクトの環境設定をJavaSE-1.6に準拠させると、少なくとも問題のコードに対してコンパイルに関する警告が表示されますが、警告またはエラーはEclipseでは表示されません。

プロジェクトJavaビルド・パスと第二に

上の実行環境から>プロパティ> Javaコンパイラ> JDKのコンプライアンス>使用遵守「のJava SE-1.6」は、我々は最終的な展開をコンパイルするためにMavenを使用しています。 pomは、1.6コンパイラに準拠するよう明確に指示されています。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
     <optimize>true</optimize> 
    </configuration> 
</plugin> 

しかし、問題のコードで正常に実行されます。

コンパイルされているよりも前のJvmでコードが動作しない場合、どうすればmavenとeclipseの両方が失敗するのでしょうか?

ありがとう、ポール。

+0

私は前に似たような状況に直面していたことを覚えていますが(1.5対1.6です)、当時は期待どおりに動作します。それを引き起こしているJDKにバグがあるのであれば、私は疑問に思いますか? –

答えて

2

後方互換性のないAPIを使用する場合は、maven動物スニファプラグインを使用して通知します。また、Java 1.7にはこの機能があると言われていますが、個人的な経験はありません。

+0

これは素晴らしいことですが、少なくとも間違ったコードでは展開できません。ありがとう。 – pstanton

2

開発環境でjava 1.6をインストールし、Eclipseでプロジェクトを右クリックし、[プロパティ] - > [Javaビルドパス]に移動します。 [Libraries]タブに移動し、Java 1.7 JREを削除して、Java 1.6 JREを追加します。

私はその半分に答えるために十分に精通していません。

+0

古いバージョンのJavaをインストールしないと方法はありませんか? – pstanton

+0

私が言う限り、はい。コンプライアンスメニューで説明したやり方は、コンパイラのコンプライアンスレベルのドロップダウンがあります。コンパイラのコンプライアンスのために古いjavaを選択すると、そのレベルのJREがインストールされていることを確認するメッセージが下部に表示されます。 – Thomas

+0

ええ私はそれを気付いていましたが、異なる要件を持ついくつかの異なるプロジェクトがあるので、これを避けることを望んでいました... – pstanton

関連する問題