Как вы используете Maven для совместного использования исходного кода для двух проектов?

У меня есть большой проект веб-приложений Java с использованием Maven, и мне нужно запустить новый проект, в котором будет использоваться большинство одного и того же кода (поэтому мне не нужно повторять работу), но не все. Я собираюсь скопировать общий код в новый проект (назовите его "root" ). Как сделать исходный проект зависимым от корня для исходного кода? Я не могу просто использовать jar, потому что хочу изменить исходный код перед компиляцией.

Ответ 1

Вы должны реорганизовать свои проекты.

  • Определите общий код
  • Извлеките это в свой собственный модуль maven
    2.1. обычно веб-приложения являются мультимодулями, поэтому, если вы собираетесь поделиться общей библиотекой через два веб-приложения, отделите общую библиотеку на свой собственный идентификатор группы
  • Создайте и установите файл jar в свой репозиторий
  • изменить настройки веб-приложений в зависимости от вашей новой библиотеки.

Ответ 2

Создайте проект maven, который содержит весь ваш общий код. Храните упаковку этого проекта (в основном pom.xml) как банку. Это поможет сделать этот проект видом библиотеки для вашего использования.

Во всех проектах, которые обращаются к общему коду, добавьте зависимость для этого проекта в соответствии с вашими потребностями. (скомпилировать, при условии).

Теперь пакет и установите общий проект, прежде чем создавать какие-либо зависимые проекты. Это добавит общий проект в локальный репозиторий, который затем будет использоваться вашими зависимыми проектами.

Добавление образца pom.xml для общих и зависимых проектов.

Общий проект pom.

<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>  
  <parent>  
    <artifactId>com.myspace.test</artifactId>  
    <groupId>com.myspace</groupId>  
    <version>0.0.1-SNAPSHOT</version>  
  </parent>  
  <groupId>com.myspace</groupId>  
  <artifactId>shared</artifactId>  
  <version>0.0.1-SNAPSHOT</version>  
  <name>shared-module</name>  
  <description>shared module which contains code shared by other modules.</description>  
</project>

Зависимый проект pom.

<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>  
  <parent>  
    <artifactId>com.myspace.test</artifactId>  
    <groupId>com.myspace</groupId>  
    <version>0.0.1-SNAPSHOT</version>  
  </parent>  
  <groupId>com.myspace</groupId>  
  <artifactId>dependent-module</artifactId>  
  <version>0.0.1-SNAPSHOT</version>  
  <name>dependent-module</name>  
  <description>Dependent module.</description>  
  <dependencies>  
    <dependency>  
      <groupId>com.myspace</groupId>  
      <artifactId>shared</artifactId>  
      <version>0.0.1-SNAPSHOT</version>  
      <scope>provided</scope>  
    </dependency>  
  </dependencies>  
</project>

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

Ответ 3

Установите общий код, используя текущую настройку упаковки jar:

mvn install

Затем вы можете создать зависимость в дочернем pom.xml(код, который не является общим) из любого репозитория, который вы устанавливаете.

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