2016-12-21 1 views
1

У меня есть проект, который запускается клиентами, использующими среду выполнения Java 7.Maven: Как защитить проект Java 7 от использования артефактов jar, которые компилируются против Java 8?

Я добавил зависимость от артефакта, который компилируется на Java 8 - использует функции Java 8, такие как lambdas и streams.

При компиляции моего проекта я не ошибаюсь, что что-то не так.

Во время выполнения, я получаю кучу ошибок, не признавая вещи, очевидно.

Есть ли способ защитить мой проект от использования артефакта в зависимости от Java более высокого уровня? Спасибо.

* Это общий вопрос для артефакта в зависимости от некоторого низкоуровневого Java API, который пытается добавить зависимость от другого артефакта, который зависит от Java более высокого уровня.

* Я предполагаю, что это связано с тем, что Java не является частью определения явной зависимости, а скорее неявным. Вопрос заключается в том, как сделать его более явным и защищенным.

+1

Я не думаю, что существует общее решение. Я могу подумать о том, чтобы исправить ваше определение зависимости в вашем POM до последней известной рабочей версии. Вы сконфигурировали свой POM для использования реального компилятора Java7, установленного на вашем ПК, для компиляции вашего проекта? –

ответ

4

Вы можете использовать maven-enforcer-plugin в сочетании с extra-enforcer-rule, который выглядит следующим образом:

<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> 

Вы можете сделать его более безопасным для использования другой enforcer-rule, который вы можете использовать, чтобы заставить использовать правильный JDK

+0

Почему исключение 'org.mindrot: jbcrypt'? –

+0

Как пример ... – khmarbaise

Смежные вопросы