2010-10-01 2 views
0

Это может быть больше технологического решения. В настоящее время я работаю над проектом, который разделен на библиотеку и приложение внедрения. Это очень эффективный способ отладки библиотеки по мере создания приложения. Я хотел бы использовать Maven для обоих проектов, но я не хочу делать сборку и развертывание для каждого незначительного изменения. Есть ли способ, чтобы Maven почти полностью ссылался на проект как на хранилище?Разработка библиотеки с Maven

ответ

2

Вы правы, это вопрос процесса. Я интерпретирую ваш вопрос как желание избежать объявления конкретной версии библиотеки в качестве зависимости в реализации. Цель состоит в том, чтобы самостоятельно обновить любой компонент, в частности, вы хотите обновить библиотеку, не перестраивая реализацию.

Вам необходимо будет перестроить и переделать что-то, если вы внесете изменения. Однако я вижу два шага, которые должны решить вашу проблему. Я собираюсь назвать ваши компоненты 'lib' и 'app'.

  1. Создайте пустой проект «обертка», зависимый (scope = runtime) как от lib, так и от приложения. Эта оболочка - это то, что вы развернете. Когда вы обновляете lib или приложение, вам нужно только обновить версию этой зависимости в проекте-обертке. Когда вы «строите» (компиляция является не-оператором) и проверяете проект-оболочку, вы убедитесь, что старое/новое приложение все еще работает с новой/старой библиотекой, и вы можете развернуть это обновление. Конечно, если ваши тесты не сработают, вам нужно будет обновить зависимость lib от приложения, чтобы узнать, исправляет ли проблема перестройку, и попытайтесь найти, у какого компонента есть ошибка. По-моему, это решение на полпути.
  2. Лучше также создать компонент «lib-api», который объявит интерфейс между lib и app. Сделать lib и app зависимыми от lib-api, но приложение не зависит от конкретной версии lib. Возможно, вам все равно нужен проект-оболочка, как описано выше, для облегчения развертывания (поскольку вам нужно будет фактически развернуть как lib, так и приложение). Но пока вам не нужно влиять на библиотеку api, вы можете быть уверены, что ваши изменения в lib или app защищены друг от друга и не будут (не могут) требовать пересоединения. Это может облегчить отслеживание всех ошибок. Если вам нужно обновить lib-api, вам, очевидно, нужно будет перестроить все, но это будет правда в любом случае и, по крайней мере, так, как это показано в структуре проекта.

Надеюсь, это имеет смысл для вас, и я правильно истолковал ваш вопрос.

1

У вас может быть «супер-пом», в котором есть два подпроекта. Один проект будет вашей библиотекой, а другой проект будет вашим приложением. Оба могут быть разработаны индивидуально.

Ваше приложение будет иметь зависимость от проекта с библиотекой.

Например:

"супер-П": хранить этот pom.xml в выше каталоге. Вы бы что-то вроде этого в нем:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>your.group</groupId> 
    <artifactId>project</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>caap</name> 
    <modules> 
     <module>project-library</module> 
     <module>project-app</module> 
    </modules> 
</project> 

Тогда ваша библиотека pom.xml будет иметь что-то вроде этого:

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <artifactId>project</artifactId> 
     <groupId>your.group</groupId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 
    <groupId>=your.group</groupId> 
    <artifactId>project-library</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <name>project-library</name> 
</project> 

И ваше приложение будет иметь что-то вроде этого:

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <artifactId>project</artifactId> 
     <groupId>your.group</groupId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 
    <groupId>=your.group</groupId> 
    <artifactId>project-application</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <name>project-application</name> 
     <dependencies> 
       <dependency> 
      <artifactId>project-library</artifactId> 
      <groupId>your.group</groupId> 
        <version>1.0-SNAPSHOT</version> 
       </dependency> 
     </dependencies>    
</project> 
0
mvn install 

Похоже, что я хочу. Просто запустив его из проекта, он добавит его в локальное репо, и другие приложения смогут его поднять.

+0

Хорошо, я полностью неверно истолковал ваш вопрос и пытался ответить на него тем временем ... и я даже не понимаю, что вы, должно быть, делали раньше? Я оставлю свой ответ, но не забудьте проигнорировать его. –

+0

Я относительно новичок в Maven, таким образом, надзор. В Eclipse я использовал приложение lib, s как зависимость, а затем создавал и развертывал приложение. – BobBrez

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