2016-12-21 5 views
1

私は、Java 7ランタイムを使用している顧客が実行するプロジェクトを持っています。Maven:Java 7プロジェクトでJava 8でコンパイルされたjar成果物を使用しないようにするにはどうすればよいですか?

Java 8でコンパイルされたアーティファクトに依存関係を追加しました。lambdasやストリームなどのJava 8機能を使用します。

私のプロジェクトをコンパイルするとき、何か間違っているというエラーはありません。

実行時でも、明らかに何かを認識するのではなく、エラーが発生します。

より高いレベルのJavaに応じて、私のプロジェクトがアーティファクトを使用するのを防ぐ方法はありますか?ありがとうございます。

*これは、上位Javaに依存する別のアーティファクトへの依存関係を追加しようとする低レベルJava APIに応じて、アーティファクトに関する一般的な質問です。

*これは、Javaが明示的な依存性定義の一部ではなくむしろ暗黙的であるためです。問題は、それをより明示的に保護する方法です。

+1

を使用するように強制するために使用できる別のenforcer-ruleを使用することがより安全に行うことができます私は一般的な解決策があるとは思わない。私が考えることができるのは、あなたのPOMの依存関係定義を、最後に知られている作業バージョンに修正することです。プロジェクトをコンパイルするためにPCにインストールされている実際のJava7コンパイラを使用するようにPOMを構成しましたか? –

答えて

4

あなたはこのようになりますどのextra-enforcer-ruleと組み合わせてmaven-enforcer-pluginを使用することができます。

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <version>1.4.1</version> 
     <executions> 
      <execution> 
      <id>enforce-bytecode-version</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <enforceBytecodeVersion> 
        <maxJdkVersion>1.7</maxJdkVersion> 
        <excludes> 
        <exclude>org.mindrot:jbcrypt</exclude> 
        </excludes> 
       </enforceBytecodeVersion> 
       </rules> 
       <fail>true</fail> 
      </configuration> 
      </execution> 
     </executions> 
     <dependencies> 
      <dependency> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>extra-enforcer-rules</artifactId> 
      <version>1.0-beta-6</version> 
      </dependency> 
     </dependencies> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

あなたは正しいJDK

+0

なぜ 'org.mindrot:jbcrypt'除外ですか? –

+0

例として... – khmarbaise

関連する問題