Сборка для разных платформ по принципу Maven

У меня есть проект с подмодулем a: jar , которому нужен другой набор зависимостей, в зависимости от того, для какой платформы он скомпилирован. Код одинаковый для всех платформ. Например. на Android библиотека httpcomponents уже включена в ОС, а я должен включить ее в сборки для сред J2SE. У меня также есть еще один подмодуль, который собирает несколько подмодулей и их зависимости в архив. Как я могу надежно настроить подмодуль сборки, чтобы взять все подмодули, скомпилированные для соответствующей платформы, и их зависимости, подходящие для этой платформы?

Я попытался использовать профили для создания a: jar: android и a: jar: j2se . Однако объявление зависимости от одного из них приведет к странным зависимостям в сборке. То есть dependency: tree проекта сборки иногда включает зависимости от a: jar: j2se (не имеет значения, объявил ли я использование a: jar : android или a: jar: j2se в сборке), а иногда и другое. Он изменился (часто) после того, как я обновил jar-файлы a в локальном репозитории. Переключение в сборочном проекте также использует профили.

Я мог бы решить эту , применив те же зависимости к профилям проекта сборки , которые необходимы для профиля отдельных подмодулей. Но поскольку мне приходится повторяться в POM, вероятно, есть более изобретательный способ добиться этого. Поскольку я новичок в maven, мне интересно, что это такое? Я не хочу дублировать код (это было бы даже более повторяющимся, поскольку код остается прежним), и мне не нравится дублировать части POM, поскольку их изменение из-за обновлений версии может быть сложным.

Некоторые конкретные материалы: Зависимости от a: jar POM:

  
    .....
    
      org.apache.httpcomponents
      httpmime
      4.0.1
      compile
      
      
        
          org.apache.httpcomponents
          httpclient
        
        ....
      
    
  
  
    
      android
      
        
          com.google.android
          android
          1.6_r2
          provided
           
      
    
    
      java
      
        
          org.apache.httpcomponents
          httpclient
          4.0.1
          compile
        
        
          commons-codec
          commons-codec
          1.3
          compile
        
      
    
  

Профили проекта сборки (в котором используется подключаемый модуль Maven Assembly):

  
    
      android     
      
        
          a
          a
          ${project.version}
          android
          jar
        
         
        
          com.google.android
          android
          1.6_r2
          provided
           
         
      
    
    
      java
      
        
        
          org.apache.httpcomponents
          httpclient
          4.0.1
          compile
        
        
          commons-codec
          commons-codec
          1.3
          compile
        
         
        
          a
          a
          ${project.version}
          java
         jar
        
      
    
  

Я бы хотел избавиться от отмеченные объявления зависимостей.

5
задан Community 23 May 2017 в 12:33
поделиться