web-dev-qa-db-ja.com

mavenはLinuxおよびWindowsプラットフォームの両方で外部スクリプトを呼び出します

LinuxとMS-Windowsの両方のプラットフォームで外部スクリプトを実行する必要があります。

  1. 適切なプラグインexec-maven-pluginを使用していますか?
  2. より適切なプラグインはありますか?
  3. <executable>....</executable>にはどのファイル名を入れればよいですか?

    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.2.1</version>
        <executions>
            <execution>
                <id>compile-jni</id>
                <phase>compile</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>./compile-jni</executable>
                    <workingDirectory>${basedir}/src/main/cpp</workingDirectory>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

Linux/MS-Windowsの両方のプラットフォームで同じMakefileを使用しています

私のスクリプトcompile-jni.bat

call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
bash -c "make" 

私のスクリプトcompile-jni.sh

#!/bin/sh
make

更新:

2人の同僚が代替案を提案しています:

  1. 変数script.extension変更<executable>./compile-jni${script.extension}</executable>pom.xmlで使用し、コマンドライン内に変数を追加しますmvn compile -Dscript.extention=.bat

  2. または、mavenを呼び出す前にVisual Studio環境変数を設定します。

    call "C:\%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
    mvn compile #(the same script 'bash -c "make"' works on both platforms)
    

しかし、どちらのソリューションでも、Eclipseユーザーは立ち往生しているかもしれません...私はまだ自動でエレガントなソリューションを探しています...

23
olibre

最後に、アイデアを混合しました=> <profiles>は、オペレーティングシステムに応じて内部変数script.extensionを設定するために使用されます。

<profiles>
  <profile>
    <id>Windows</id>
    <activation>
      <os>
        <family>Windows</family>
      </os>
    </activation>
    <properties>
      <script.extension>.bat</script.extension>
    </properties>
  </profile>
  <profile>
    <id>unix</id>
    <activation>
      <os>
        <family>unix</family>
      </os>
    </activation>
    <properties>
      <script.extension>.sh</script.extension>
    </properties>
  </profile>
</profiles>

次に、変数を使用してスクリプトファイル名を完成させます。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <id>compile-jni</id>
      <phase>compile</phase>
      <goals>
        <goal>exec</goal>
      </goals>
      <configuration>
        <executable>./compile-jni${script.extension}</executable>
      </configuration>
    </execution>
  </executions>
</plugin>


Maksim for maven 3.5.4で示されているように、セクション<configuration>を上に移動します

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <configuration>
    <executable>./compile-jni${script.extension}</executable>
  </configuration>
  <version>1.2.1</version>
  <executions>
    <execution>
      <id>compile-jni</id>
      <phase>compile</phase>
      <goals>
        <goal>exec</goal>
     </goals>
    </execution>
  </executions>
</plugin>

作業ディレクトリをpom.xmlからシェルスクリプトに移動しました。メンテナンスを簡略化するために、一般的なものはこのシェルスクリプト内で移動されます。したがって、バッチファイルは次のシェルスクリプトを使用します。

compile-jni.bat

call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
bash compile-jni.sh

compile-jni.sh

#!/bin/sh
cd src/main/cpp
make
38
olibre

Shスクリプトの実行例。

これは、shスクリプトに対してchmodを実行するだけです。 shスクリプトがある場合は、実際のスクリプトの実行などの他の操作を実行する前に、必ずchmodを実行する必要があることに注意してください。これを例にすると、最初の<execution>を次のように実行できます。以下で、別の<execution>を追加してスクリプトを実行します。

バッチファイルの場合、<execution>を1つだけ使用してスクリプトを実行できます

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>${org.codehaus.mojo.version}</version>
            <executions>
               <execution>
                    <id>script-chmod</id>
                    <phase>install</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>chmod</executable>
                        <arguments>
                            <argument>+x</argument>
                            <argument>yourscript.sh</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>

そしてあなたはおそらくあなたがあなたのマシンに応じてプロファイルを追加したいと思うでしょう:

<profiles>
  <profile>
    <activation>
      <os>
        <family>!windows</family>
      </os>
    </activation>
    <plugin>
      <!-- add your exec-maven-plugin here -->
    </plugin>
    ...
  </profile>
</profiles>

これがあなたが必要とするものの始まりになることを願っています

5
Andrei Sfat