English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Обычно большой программный продукт содержит несколько модулей, и часто несколько команд разрабатывают различные модули одного приложения. Приведем пример: предположим, что одна команда разрабатывает frontend приложения, проект app-ui (app-ui.jar:1.0), а другая команда разрабатывает backend приложения, используя проект data-service (data-service.jar:1.0).
Теперь可能出现的情况是, команда, занимающаяся разработкой data-service, находится в быстром темпе исправления ошибок или улучшения проекта, и они почти каждый день публикуют библиотеку в удаленный репозиторий. Теперь, если команда data-service загружает новую версию каждые два дня, могут возникнуть следующие проблемы:
Команда data-service должна уведомлять команду app-ui каждый раз, когда она публикует обновленный код.
Команда app-ui должна часто обновлять свой файл pom.xml до последней версии.
Чтобы решить эту проблему:快照的概念派上了用场。
Snapshot - это особый тип версии, который указывает на копию текущего хода разработки. В отличие от обычных версий, Maven каждый раз при сборке проверяет новые snapshot в удаленном репозитории. Теперь команда data-service будет каждый раз публиковать обновленный snapshot кода в репозиторий, например data-service:1.0-SNAPSHOT, вместо старых jar-пакетов snapshot.
Для версий, если Maven ранее скачивал指定的 версии файла, например data-service:1.0, Maven больше не будет скачивать новые доступные файлы 1.0 из репозитория. Чтобы скачивать обновленный код, версия data-service должна быть увеличена до 1.1.
В случае snapshot, каждый раз, когда команда app-ui строит свой проект, Maven автоматически получает последнюю snapshot (data-service:1.0-SNAPSHOT).
Проект app-ui использует snapshot версии проекта data-service 1.0.
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>app-ui</groupId> <artifactId>app-ui</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>health</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>data-service</groupId> <artifactId>data-service</artifactId> <version>1.0-SNAPSHOT</version> <scope>test</scope> </dependency> </dependencies> </project>
Проект data-service выпускает версию 1.0 для каждого малого изменения.
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>data-service</groupId> <artifactId>data-service</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>health</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project>
Хотя в случае snapshots Maven автоматически получает последнюю версию snapshots в повседневной работе, вы также можете强制 Maven использовать самую последнюю версию snapshots, добавив параметр -U к любому команде Maven.
mvn clean package -U
Откроем командную консоль, перейдем в директорию C:\ > MVN > app-ui и выполним следующую команду mvn.
C:\MVN\app-ui>mvn clean package -U
Maven будет начинать строительство проекта после загрузки последней версии data-service.
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------- [INFO] Building consumerBanking [INFO] task-segment: [clean, package] [INFO] ------------------------------------------------------------------- [INFO] Downloading data-service:1.0-SNAPSHOT [INFO] 290K downloaded. [INFO] [clean:clean {execution: default-clean}] [INFO] Deleting directory C:\MVN\app-ui\target [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, и.е. сборка зависит от платформы! [INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\main\ resources [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to C:\MVN\app-ui\target\classes [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, и.е. сборка зависит от платформы! [INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\test\ resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Compiling 1 source file to C:\MVN\app-ui\target\test-classes [INFO] [surefire:test {execution: default-test}] [INFO] Директория отчета Surefire: C:\MVN\app-ui\target\ surefire-reports ------------------------------------------------------- Т Е С Т ------------------------------------------------------- Запуск com.companyname.bank.AppTest Запущены тесты: 1, Провалы: 0, Ошибки: 0, Пропущены: 0, Время выполнения: 0.027 sec Результаты : Запущены тесты: 1, Провалы: 0, Ошибки: 0, Пропущены: 0 [INFO] [jar:jar {execution: default-jar}] [INFO] Building jar: C:\MVN\app-ui\target\ app-ui-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2 seconds [INFO] Finished at: Tue Jul 10 16:52:18 IST 2012 [INFO] Final Memory: 16M/89M [INFO] ------------------------------------------------------------------------