我需要在Linux和微软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>
我用同样的Makefile
两个平台的Linux / MS-Windows系统
我的脚本compile-jni.bat
:
call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
bash -c "make"
我的脚本compile-jni.sh
:
#!/bin/sh
make
更新:
两个同事所建议的替代方案:
使用可变script.extension
变化<executable>./compile-jni${script.extension}</executable>
在pom.xml
和附加命令行内的可变mvn compile -Dscript.extention=.bat
或致电行家之前设置的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用户可stucked ...我仍然在寻找一种自动和优雅的解决方案...
最后,我混合的思想=>的<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>
⚠正如注意到通过马克西姆对于行家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
的shell脚本。 为了简化维护,常见的东西是这个壳纸条内移动。 因此,批处理文件中使用这个shell脚本:
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脚本的例子。
这只是做一个chmod
的sh脚本。 请记住,如果你有一个sh脚本,你绝对应该做一个chmod
执行其它操作,例如运行实际的脚本,所以有此作为一个例子,你可以做第一个前<execution>
如下,并添加另一个<execution>
运行脚本。
对于批处理文件,你只能有一个<execution>
运行脚本
<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>
希望这将是你所需要的一个开始