Maven'ın pom.xml'sinden kabuk komutlarını çalıştırmak istiyorum


105

Linux kabuk komutlarını Maven ile yürütmek istiyorum. İşte denediğim şey:

<plugin>  
  <groupId>org.codehaus.mojo</groupId> 
  <artifactId>exec-maven-plugin</artifactId> 
  <version>1.1.1</version> 
  <executions>
    <execution>
      <goals>
        <goal>exec</goal> 
      </goals>
    </execution>
  </executions>
  <configuration>
    <executable>hostname</executable> 
  </configuration>
</plugin>

lütfen sorunuzu temizleyin ve sorunuzdaki pom.xml dosyasını biçimlendirin. Okunabilir değil.
zengr

12
Kaba olmak istemem ama gerçekten nasıl soru soracağını öğrenmen gerekiyor, biz psişik değiliz. Ne yaptın? Ne aldın? Beklenen sonuç nedir?
Pascal Thivent

Yanıtlar:


148

İşte benim için işe yarayanlar:

<plugin>
  <artifactId>exec-maven-plugin</artifactId>
  <groupId>org.codehaus.mojo</groupId>
  <executions>
    <execution><!-- Run our version calculation script -->
      <id>Version Calculation</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>exec</goal>
      </goals>
      <configuration>
        <executable>${basedir}/scripts/calculate-version.sh</executable>
      </configuration>
    </execution>
  </executions>
</plugin>


11
Eklentinin (en azından) 1.5.0 sürümüyle çalışmadığını eklemek isterim, çünkü <configuration />sonradan gelmeli <executions />ve buraya yerleştirilmemelidir. Bu basit sözdizimsel hatayı bulmam epey zaman aldı. Maven'in hata çıktısı gerçekten o kadar yararlı değil.
joergl

1
Komut dosyasını dağıtım aşamasından sonra çalıştırmak istiyorsak hangi aşamayı veya hedefi sağlamamız gerekir?
Lucy

3
Maven aşamaları burada listelenmiştir: maven.apache.org/guides/introduction/…
Ed Randall

2
<workingDirectory>${basedir}/scripts/</workingDirectory>Konfigürasyon bloğunda tam yolu vermek yerine kullanmak <executable>da iyi bir fikir olabilir
akn

35

Buradaki sorun, ne beklendiğini bilmemem . Mevcut kurulumunuzla, eklentiyi komut satırında çalıştırmanız yeterli olacaktır:

$ mvn exec: exec
[INFO] Projeler taranıyor ...
[BİLGİ] ----------------------------------------------- -------------------------
[INFO] Bina Q3491937
[BİLGİ] görev segmenti: [exec: exec]
[BİLGİ] ----------------------------------------------- -------------------------
[BİLGİ] [exec: exec {execution: default-cli}]
[INFO] dizüstü bilgisayar
[BİLGİ] ----------------------------------------------- -------------------------
[BİLGİ] BAŞARILI OLUŞTURUN
[BİLGİ] ----------------------------------------------- -------------------------
...

Global configurationkullanılır, hostnamekomut çalıştırılır ( laptopbenim ana bilgisayar adımdır). Başka bir deyişle, eklenti beklendiği gibi çalışır.

Şimdi, bir eklentinin yapının bir parçası olarak yürütülmesini istiyorsanız, belirli bir aşamada bir hedef bağlamanız gerekir . Örneğin, onu bağlamak için compile:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.1.1</version>
    <executions>
      <execution>
        <id>some-execution</id>
        <phase>compile</phase>
        <goals>
          <goal>exec</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <executable>hostname</executable>
    </configuration>
  </plugin>

Ve sonra:

$ mvn derlemesi
[INFO] Projeler taranıyor ...
[BİLGİ] ----------------------------------------------- -------------------------
[INFO] Bina Q3491937
[BİLGİ] görev segmenti: [derleme]
[BİLGİ] ----------------------------------------------- -------------------------
[BİLGİ] [kaynaklar: kaynaklar {yürütme: varsayılan-kaynaklar}]
[BİLGİ] Filtrelenmiş kaynakları kopyalamak için "UTF-8" kodlamasını kullanma.
[BİLGİ] mevcut olmayan resourceDirectory / home / pascal / Projects / Q3491937 / src / main / kaynakları atlayın
[BİLGİ] [derleyici: derleme {yürütme: varsayılan-derleme}]
[BİLGİ] Derlenecek bir şey yok - tüm sınıflar güncel
[BİLGİ] [exec: exec {execution: biraz-yürütme}]
[INFO] dizüstü bilgisayar
[BİLGİ] ----------------------------------------------- -------------------------
[BİLGİ] BAŞARILI OLUŞTURUN
[BİLGİ] ----------------------------------------------- -------------------------
...

Bir configurationiç belirtebileceğinizi unutmayın execution.


[HATA] HATA OLUŞTUR [BİLGİ] ------------------------------------------ ------------------------------ [BİLGİ] "exec: exec" için gerekli bir veya daha fazla eklenti parametresi geçersiz / eksik [ 0] 'exec-maven-eklentisi' eklentisi tanımının içinde aşağıdakileri belirtin: <configuration> ... <executable> VALUE </executable> </configuration> -OR- komut satırında, şunu belirtin: '-Dexec. yürütülebilir = VALUE 'Bu hatayı şimdi alıyorum.
NareshKumar

2
@ gnash-85: Ne yaptığınız hakkında hala hiçbir fikrim yok. Ben tam pasajı kullanılan sen sağlanan ve yukarıda gösterildiği gibi hiçbir sorun vardı. Lütfen maven'i nasıl çağırdığınızı (ve bir şeyi değiştirdiyseniz mevcut yapılandırmanızın ne olduğunu) göstermek için sorunuzu güncelleyin.
Pascal Thivent

Aynı kodu bir alt modüle koydum. Ve mvn exec: exec'yi ana pom.xml'den yürütmeye çalışıyorum. Ve bu hatayı alıyorum. Ama bireysel olarak yürüttüğümde çalışıyor.
NareshKumar

5
@ gnash-85: Bu normal. mvn exec:execÜst öğe üzerinde çağırdığınızda , mvn bunu üst öğe de dahil olmak üzere çoklu modül yapısının tüm projelerinde çalıştıracaktır. Ancak ana pom, eklenti executableiçin tanımlanmasını bekleyen herhangi bir yapılandırmaya sahip değildir , dolayısıyla hata mesajıdır.
Pascal Thivent

2
Bu tartışmaya ekleniyor. configurationİçini executionbloğun içinde belirtirseniz , bir grubun ( mvn install) parçası olarak çalıştırılırsa çalışır, ancak specify the following: <configuration>doğrudan çalıştırılırsa hatayı verir mvn exec:exec.
roo2

19

Çözüldü. Sorun şu ki, çalıştırılabilir sürüm Linux'ta farklı bir şekilde çalışıyor. .Sh dosyasını çalıştırmak istiyorsanız aşağıdaki şekilde yazmalısınız. Pom.xml olarak yazın

    <plugin>
        <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
        <groupId>org.codehaus.mojo</groupId>
        <executions>
            <execution><!-- Run our version calculation script -->
                <id>Renaming build artifacts</id>
                <phase>package</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>bash</executable>
            <commandlineArgs>handleResultJars.sh</commandlineArgs>
                </configuration>
            </execution>
        </executions>
    </plugin>

2
Teşekkürler! Kabuk betiklerini tercih eden bir Windows kullanıcısı olarak benim için anahtar buydu!
Ruik

6

2 Seçenek:

  1. Herhangi bir aşamaya bağlanmadan maven'den bir komutu çalıştırmak istiyorsunuz , sadece komutu yazıp maven çalıştırırsınız , sadece bir şeyi çalıştırmak için maven yapmak istersiniz, derleme / paket / ... npm startmaven ile koşmak istiyorum diyelim , bunu aşağıdakilerle başarabilirsiniz:

mvn exec:exec -Pstart-node

Bunun için aşağıdaki maven bölümüne ihtiyacınız var

  <profiles>
    <profile>
      <id>start-node</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3.2</version>
            <executions>
              <execution>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>npm</executable>
              <arguments><argument>start</argument></arguments>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

  </profiles>
  1. Belirli bir aşamadayken maven'den rastgele bir komut çalıştırmak istiyorsunuz , örneğin yükleme aşamasındayken çalıştırmak istiyorum npm installbunu aşağıdakilerle yapabilirsiniz:

mvn install

Bunun işe yaraması için aşağıdaki bölüme ihtiyacınız olacak:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.3.2</version>
    <executions>

      <execution>
        <id>npm install (initialize)</id>
        <goals>
          <goal>exec</goal>
        </goals>
        <phase>initialize</phase>
        <configuration>
          <executable>npm</executable>
          <arguments>
            <argument>install</argument>
          </arguments>
        </configuration>
      </execution>

1

Teşekkürler! Tomer Ben David. Bana yardımcı oldu. npm kurulumundan bahsettiğiniz gibi demo klasöründe pip kurulumu yapıyorum

<groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3.2</version>
            <executions>
              <execution>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>pip</executable>
              <arguments><argument>install</argument></arguments>                            
             <workingDirectory>${project.build.directory}/Demo</workingDirectory>
            </configuration>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.