2011-07-14 13 views
32

Chciałbym umieścić mój słoik wyjściowego i Jar-z zależnościami do innego folderu (nie w target/ ale w ../libs/)Maven: Jak umieścić słoik wyjściowy do innego folderu

W jaki sposób można to zrobić?

+3

Jedna mała wskazówka Mavena - nie walcz z jej preferencjami, to doprowadzi cię do szaleństwa :). Ale zawsze możesz użyć czegoś podobnego do wtyczki ant, rób właściwie wszystko, co chcesz, np. Kopiuj na końcu kompilacji od celu do ../ libs ... – cdegroot

Odpowiedz

37

Można użyć parametru maven-jar-plugin OutputDirectory do tego celu:

<project> 
    ... 
    <build> 
    <plugins> 
     ... 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.3.1</version> 
     <configuration> 
      <outputDirectory>../libs</outputDirectory> 
     </configuration> 
     </plugin> 
     ... 
    </plugins> 
    </build> 
    ... 
</project> 

Ale jak cdegroot napisał, należy chyba lepiej nie walczyć drogę maven.

+0

Możesz mieć rację ... – yelo3

+1

Może lepiej jest skopiować słoiki zamiast przenosić je? – yelo3

+0

W książce zdecydowanie sugeruję użycie wtyczki zależnej od mavenów (http://maven.apache.org/plugins/maven-dependency-plugin/) w celu rozwiązania zależności między modułami (jeśli musisz przenieść się do innego modułu). – Torsten

37

Jeśli chcesz skopiować artefakt do katalogu zewnętrznego projektu, rozwiązania mogą być:

  • maven-jar-plugin i skonfigurować outputDirectory
  • maven-antrun-plugin i skopiować zadanie
  • copy-maven-plugin Evgeny Goldin

Przykład dla copy-maven-plugin:

<plugin> 
    <groupId>com.github.goldin</groupId> 
    <artifactId>copy-maven-plugin</artifactId> 
    <version>0.2.5</version> 
    <executions> 
     <execution> 
      <id>deploy-to-local-directory</id> 
      <phase>install</phase> 
      <goals> 
       <goal>copy</goal> 
      </goals> 
      <configuration> 
       <skipIdentical>false</skipIdentical> 
       <failIfNotFound>false</failIfNotFound> 
       <resources> 
        <resource> 
         <description>Copy artifact to another directory</description> 
         <targetPath>/your/local/path</targetPath> 
         <directory>${project.build.directory}</directory> 
         <includes> 
          <include>*.jar</include> 
         </includes> 
        </resource> 
       </resources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+7

+1, to powinna być zaakceptowana odpowiedź –

+1

Ta wtyczka nie zawiera dokumentacji. – Hamdi

+2

Ta wtyczka nie działa tak jak jest, zgłasza wyjątek 'java.lang.ClassNotFoundException: org.sonatype.aether.RepositorySystem' –

9

Innym sposobem byłoby maven-resources-plugin:

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>3.0.2</version> 
    <executions> 
     <execution> 
      <id>copy-files-on-build</id> 
      <phase>validate</phase> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${basedir}/[TO-DIR]</outputDirectory> 
       <resources> 
        <resource> 
         <directory>[FROM-DIR]</directory> 
         <!--<include>*.[MIME-TYPE]</include>--> 
         <filtering>false</filtering> 
        </resource> 
       </resources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
1

Technika ta działa dobrze dla mnie:

http://maven.apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.10</version> 
     <executions> 
      <execution> 
      <id>copy</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
       <artifactItem> 
        <groupId>junit</groupId> 
        <artifactId>junit</artifactId> 
        <version>3.8.1</version> 
        <type>jar</type> 
        <overWrite>false</overWrite> 
        <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory> 
        <destFileName>optional-new-name.jar</destFileName> 
       </artifactItem> 
       </artifactItems> 
       <outputDirectory>${project.build.directory}/wars</outputDirectory> 
       <overWriteReleases>false</overWriteReleases> 
       <overWriteSnapshots>true</overWriteSnapshots> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 
0

chciałbym zrobić to w ten sposób:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.8</version> 
      <executions> 
       <execution> 
        <phase>install</phase> 
        <configuration> 
         <target> 
          <copy file="target/${artifactId}-exec.jar" tofile="../../docker/${artifactId}.jar"/> 
         </target> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
Powiązane problemy