9

HudsonでMavenを使用してJavaビルドプロセスを実行し、Surefireプラグインを使用してJUnitテストを実行していますが、ネイティブdllを必要とする1つのプロジェクトの単体テストで問題が発生しました。

私たちが見ているエラーは次のとおりです:

エラーのあるテスト:TestFormRegistrationServiceConnection(com。#productidentifierremoved#.test.RegistrationServiceTest):java.library.pathにオーセンティケーターがありません

ここで、Authenticatorは必要なdllの名前です。これを設定する唯一の方法はargLineを使用することを示唆するこのSO投稿を見つけました。構成を次のように変更しました。

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <version>2.10</version>
        <configuration>
            <forkMode>once</forkMode>
            <argLine>-Djava.library.path=${basedir}\src\main\native\Authenticator\Release</argLine>
        </configuration>
    </plugin>

ただし、これでも同じエラーが発生します。System.out.println(System.getProperty( "java.library.path"));を含めると、これがパスに追加されていないことがわかります。

これをどのように解決できるかについてのアイデアはありますか?

4

1 に答える 1

10

JUnitテストにシステムプロパティを追加するには、MavenSurefireプラグインを次のように構成します。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <systemPropertyVariables>
          <java.library.path>${project.basedir}/src/main/native/Authenticator/Release</java.library.path>
        </systemPropertyVariables>
      </configuration>
    </plugin>
  </plugins>
</build>

アップデート:

わかりました。JUnitテストを使用したJVMを開始する前に、このプロパティを設定する必要があるようです。ですから、バックスラッシュに問題があると思います。\tJavaプロパティ値の円記号は、 (tabulator)や\r\n(windows new-line)などの特殊文字をエスケープするために使用されます。したがって、ソリューションの代わりにこれを使用してみてください。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <forkMode>once</forkMode>
        <argLine>-Djava.library.path=${project.basedir}/src/main/native/Authenticator/Release</argLine>
      </configuration>
    </plugin>
  </plugins>
</build>
于 2012-04-19T10:32:56.847 に答える