Разработка библиотеки с Maven - PullRequest
0 голосов
/ 01 октября 2010

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

Ответы [ 3 ]

2 голосов
/ 01 октября 2010

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

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

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

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

1 голос
/ 01 октября 2010

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

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

Например:

"super-pom": сохраните этот 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 голосов
/ 01 октября 2010
mvn install

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

...