LinuxとMS-Windowsの両方のプラットフォームで外部スクリプトを実行する必要があります。
exec-maven-plugin
を使用していますか?<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人の同僚が代替案を提案しています:
変数script.extension
変更<executable>./compile-jni${script.extension}</executable>
をpom.xml
で使用し、コマンドライン内に変数を追加しますmvn compile -Dscript.extention=.bat
または、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ユーザーは立ち往生しているかもしれません...私はまだ自動でエレガントなソリューションを探しています...
最後に、アイデアを混合しました=> <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
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>
これがあなたが必要とするものの始まりになることを願っています