2012-08-17 10 views
6

Chcę podzielić moje zadanie ciągłej integracji (Hudson) na dwa etapy. (Ponieważ środowisko wykonawcze z kompilacją i raportowaniem razem trwa zbyt długo.) W pierwszym zadaniu zbudowałem mój projekt z jednym modułem z powodzeniem "pakiet mvn". Następnie kopiuję swój obszar roboczy do innej lokalizacji i próbuję ponownie zbudować projekt tylko z celem "site" i/lub findbugs/checkstyle/pmd w celu utworzenia raportów. Ale to nie działa! Maven nie może rozwiązać zależności z moich submodułów. (ale wszystkie słoje są dostępne w swoich folderach docelowych.)Witryna Maven w projekcie z wieloma modułami nie może rozwiązać zależności.

Przykład: Moja struktura wygląda następująco:

  • nadrzędna
    • B
    • C
    • D

Projekt C ma jako zależność projektu B.

Kiedy budować wszystko z mvn „miejscu”, generuje dla projektu A i B Wszystkie raporty. Ale zatrzymany w projekcie C z komunikatem o błędzie "Nie można rozwiązać zależności dla projektu B." Ale projekt B jest już zbudowany z "pakietem mvn". To znaczy. Mogę znaleźć plik JAR projektu B w folderze docelowym.

Czy istnieje sposób na rozwiązanie zależności od modułu podrzędnego B bez "instalacji mvn"? (nie chcę robić tego na moim serwerze CI obawiam może to być niebezpieczne dla innych prac z tej samej bazie kodu.).

Aktualizacja 20.08.12:

POM korzenia Folder:

<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> 
    <name>Foo</name> 
    <groupId>foo</groupId> 
    <artifactId>bar</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <modules> 
     <module>parent</module> 
    </modules> 
</project> 

POM nadrzędny:

<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> 
    <name>Foo</name> 
    <groupId>foo</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <modules> 
     <module>../bar-a</module> 
     <module>../bar-b</module> 
     <module>../bar-c</module> 
     <module>../bar-d</module> 
    </modules> 
    [...] 
    <reporting> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>findbugs-maven-plugin</artifactId> 
       <version>2.5.1</version> 
       [...] 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-pmd-plugin</artifactId> 
       <version>2.7.1</version> 
       [...] 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-checkstyle-plugin</artifactId> 
       <version>2.9.1</version>    
       [...] 
      </plugin> 
     </plugins> 
    </reporting> 
</project> 

POM B :

<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> 
     <groupId>foo</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0</version> 
     <relativePath>../parent</relativePath> 
    </parent> 
    <name>Bar B</name> 
    <artifactId>bar-b</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 
    [...] 
</project> 

POM C:

<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> 
     <groupId>foo</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0</version> 
     <relativePath>../parent</relativePath> 
    </parent> 
    <name>Bar C</name> 
    <artifactId>bar-c</artifactId> 
    <packaging>jar</packaging> 
    [...] 
    <dependencies> 
     <dependency> 
      <groupId>foo</groupId> 
      <artifactId>bar-b</artifactId> 
      <version>1.0</version> 
     </dependency> 
    </dependencies> 
    [...] 
</project> 
+0

Bez pom's trudno zgadnąć ... ale wygląda na to, że zależność/moduł nie jest poprawnie skonfigurowany. witryna mvn clean powinna działać bez błędów. – khmarbaise

+0

Czy pakiet mvn clean działa również bez błędów? – khmarbaise

+0

Tak. "pakiet mvn clean" działa bez błędów. "witryna mvn clean" nie. Przesyłam fragment kodu później. – user1606528

Odpowiedz

1

byłem stoi zupełnie sam "długi czas" problem.

Jedyny sposób (jak sądzę), aby rozwiązać ten problem przy pomocy twojego sposobu pracy, to rzeczywiście instalacja mvn, jak to zasugerowałeś.

Ale problem polega na tym, że próbujesz mieć różne zachowania przy kopiowaniu przestrzeni roboczej. Zamiast tego należy wziąć pod uwagę, że CI będzie budował i testował tak często, jak chcesz (każde zatwierdzenie lub co godzinę), ale raportował tylko jeden raz (na przykład północ). Będziesz w stanie mieć szybsze ciągłe kompilacje i poprawiać dokumentację i raportowanie w nocy.

To jest sposób, w jaki pracujemy i jest to wystarczające. Używamy do tego dżininek, ale możesz go wywołać z każdym miękkim zdaniem CI)!

@hourly : mvn clean package (or install) --> from 1 to 5 minutes to run all test on all modules 
@daily : mvn clean install site --> from 15 to 35 minutes to run all test on all modules + doc + reports + PDF reports 

Można również użyć profili wywołać różne zachowania, ale to jest zbyt skomplikowane dla takiego podstawowego użytku.

Powiązane problemy