25

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>
    

MakefileLinux/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

アップデート:

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 ユーザーは立ち往生する可能性があります...私はまだ自動でエレガントなソリューションを探しています...

4

2 に答える 2

40

最後に、私はアイデアを混ぜ合わせました=>オペレーティングシステムに応じて<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>


  ⚠   As noticed by Maksim for maven 3.5.4 move up the section <configuration> as shown below:  
 

<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
于 2013-02-11T14:38:27.637 に答える
5

shスクリプトの実行例。

これはchmod、shスクリプトに対してのみ実行されます。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>

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

于 2013-02-11T10:32:50.850 に答える