2016-08-09 30 views
0

Ich habe gerade ein Projekt mit flacher Struktur mit folgender Abhängigkeit;Maven Projekteinrichtung

Core --> core.jar 
      Service --> WAR 
      Domain --> domain.jar 
        Web -> WAR 

So ziemlich alles hängt von core.jar vom Core-Modul ab, und Web hängt vom Domain-Jar vom Domain-Modul ab, das vom Core abhängt.

Ich plane, dies zu Maven zu konvertieren, ich brauche etwas Rückmeldung über die beste Struktur, die ich verwenden sollte.

Ich habe die Wahl, die aktuelle Struktur zu behalten und JAR-Dateien von jedem Modul zu erzeugen und sie als Teil der Abhängigkeit mit maven zu verwenden. Oder Re Struktur der Module in irgendeiner Art von Hierarchie, wo ich Hilfe brauche.

Ich möchte eine Art Best Practice von Maven folgen.

Antwort

2

Richten Sie einen übergeordneten Pom ein, mit dem Sie die Abhängigkeiten zwischen den untergeordneten Projekten verwalten können. Richte dann jedes deiner Jar/War-Artefakte als Module ein.

Jedes Modul bezieht seine Abhängigkeiten mit dem normalen <dependencies> im Modul pom.

dies so haben:

parent-project [pom]: 
    modules: 
     core [jar] 
     domain [jar] - depends on core 
     service [war] - depends on core 
     web [war] - depends on domain 

Und als ein konkretes Beispiel, hier ist eine Probe von einem meiner Projekte:

Mutter 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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.example</groupId> 
    <artifactId>myproject-parent</artifactId> 
    <version>1.0.0</version> 
    <packaging>pom</packaging> 

    <name>myproject-parent</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <jersey.version>2.6</jersey.version> 
     <jsonunit.version>1.5.5</jsonunit.version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <spring.version>4.1.4.RELEASE</spring.version> 
    </properties> 

    <modules> 
     <module>api-client</module> 
     <module>load-tests</module> 
     <module>regression-tests</module> 
    </modules> 


    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.2</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <reporting> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-report-plugin</artifactId> 
       <version>2.18.1</version> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>cobertura-maven-plugin</artifactId> 
       <version>2.7</version> 
      </plugin> 
     </plugins> 
    </reporting> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-context</artifactId> 
       <version>${spring.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-test</artifactId> 
       <version>${spring.version}</version> 
       <scope>compile</scope> 
      </dependency> 

      <dependency> 
       <groupId>org.glassfish.jersey.core</groupId> 
       <artifactId>jersey-client</artifactId> 
       <version>${jersey.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.glassfish.jersey.media</groupId> 
       <artifactId>jersey-media-json-jackson</artifactId> 
       <version>${jersey.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.glassfish.jersey.connectors</groupId> 
       <artifactId>jersey-apache-connector</artifactId> 
       <version>${jersey.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>org.apache.commons</groupId> 
       <artifactId>commons-lang3</artifactId> 
       <version>3.3.2</version> 
      </dependency> 
      <dependency> 
       <groupId>commons-cli</groupId> 
       <artifactId>commons-cli</artifactId> 
       <version>1.2</version> 
      </dependency> 
      <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
       <version>1.7.10</version> 
      </dependency> 

      <dependency> 
       <groupId>ch.qos.logback</groupId> 
       <artifactId>logback-classic</artifactId> 
       <version>1.1.2</version> 
      </dependency> 
      <dependency> 
       <groupId>junit</groupId> 
       <artifactId>junit</artifactId> 
       <version>4.11</version> 
      </dependency> 

      <dependency> 
       <groupId>org.thymeleaf</groupId> 
       <artifactId>thymeleaf</artifactId> 
       <version>2.1.4.RELEASE</version> 
      </dependency> 

      <dependency> 
       <groupId>org.mockito</groupId> 
       <artifactId>mockito-core</artifactId> 
       <version>2.0.5-beta</version> 
       <scope>test</scope> 
      </dependency> 

      <dependency> 
       <groupId>com.jayway.jsonpath</groupId> 
       <artifactId>json-path</artifactId> 
       <version>2.0.0</version> 
      </dependency> 
      <dependency> 
       <groupId>com.jayway.jsonpath</groupId> 
       <artifactId>json-path-assert</artifactId> 
       <version>2.0.0</version> 
       <scope>test</scope> 
      </dependency> 

      <dependency> 
       <groupId>org.freemarker</groupId> 
       <artifactId>freemarker</artifactId> 
       <version>2.3.22</version> 
      </dependency> 


      <dependency> 
       <groupId>net.javacrumbs.json-unit</groupId> 
       <artifactId>json-unit</artifactId> 
       <version>${jsonunit.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>net.javacrumbs.json-unit</groupId> 
       <artifactId>json-unit-fluent</artifactId> 
       <version>${jsonunit.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>dom4j</groupId> 
       <artifactId>dom4j</artifactId> 
       <version>1.6.1</version> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

api-Client

<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> 

    <artifactId>api-client</artifactId> 
    <packaging>jar</packaging> 
    <parent> 
     <groupId>org.example</groupId> 
     <artifactId>myproject-parent</artifactId> 
     <version>1.0.0</version> 
    </parent> 

    <properties> 
     <xmlunit.version>2.0.0-alpha-03</xmlunit.version> 
    </properties> 


    <name>api-client</name> 
    <url>http://maven.apache.org</url> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <scope>compile</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.core</groupId> 
      <artifactId>jersey-client</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-json-jackson</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.connectors</groupId> 
      <artifactId>jersey-apache-connector</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>commons-cli</groupId> 
      <artifactId>commons-cli</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.thymeleaf</groupId> 
      <artifactId>thymeleaf</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-core</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.jayway.jsonpath</groupId> 
      <artifactId>json-path</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.jayway.jsonpath</groupId> 
      <artifactId>json-path-assert</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.freemarker</groupId> 
      <artifactId>freemarker</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.xmlunit</groupId> 
      <artifactId>xmlunit-core</artifactId> 
      <version>${xmlunit.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.xmlunit</groupId> 
      <artifactId>xmlunit-matchers</artifactId> 
      <version>${xmlunit.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>net.javacrumbs.json-unit</groupId> 
      <artifactId>json-unit</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>net.javacrumbs.json-unit</groupId> 
      <artifactId>json-unit-fluent</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>dom4j</groupId> 
      <artifactId>dom4j</artifactId> 
      <version>1.6.1</version> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
     ... snip ... 
     </plugins> 
    </build> 



</project> 

und schließlich Lasttests, die auf api-Client hängt

<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> 

    <artifactId>load-tests</artifactId> 
    <packaging>jar</packaging> 
    <parent> 
     <groupId>org.example</groupId> 
     <artifactId>myproject-parent</artifactId> 
     <version>1.0.0</version> 
    </parent> 

    <name>load-tests</name> 
    <url>http://maven.apache.org</url> 


    <dependencies> 
     <dependency> 
      <groupId>org.example</groupId> 
      <artifactId>api-client</artifactId> 
      <version>${parent.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>dom4j</groupId> 
      <artifactId>dom4j</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>jaxen</groupId> 
      <artifactId>jaxen</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
    ... snip ... 
     </plugins> 
    </build> 


</project> 
0

Ich denke, was ich versuche zu demonstrieren wird Ihrer Wahl entsprechen.

  1. erstellen POM Projekt als Elternteil
  2. jedes Glas hinzufügen und Krieg als Modul

Choices ich habe, ist die derzeitige Struktur zu halten, dann produzieren JAR-Dateien von jedem Modul und sie als Teil der Abhängigkeit mit Maven.