Установить аргументы по умолчанию vm через maven для eclipse - PullRequest
9 голосов
/ 16 декабря 2010

Я хочу указать vm-аргументы -Djava.library.path =. / Src / main / resources, чтобы dll-файл выбирался автоматически, и я хочу указать это в maven, чтобы другие разработчики не должны вручную настроить затмение.

Я думал, что плагин maven eclipse мог бы помочь, поэтому я мог сделать что-то вроде

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-eclipse-plugin</artifactId>
  <version>2.7</version>
  <configuration>
    DO MAGIC HERE ???? <<-----
  </configuration>
</plugin>

Но я не вижу способа добавить аргументы VM из плагина.

Я исправил это для запуска моих тестов через maven из командной строки

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.4.3</version>
  <configuration>
    <argLine>-Xmx768m -Xms128m -Djava.library.path=${basedir}/src/main/resources/</argLine>
  </configuration>
</plugin>

Мое текущее решение состоит в том, что я должен сказать разработчикам добавить это вручную для затмения, что не очень хорошо.

У кого-нибудь есть идеи, как решить эту проблему?

ура

Дэвид.

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

Моя интерпретация вашей проблемы заключается в том, что ваше приложение загружает DLL, и эта DLL находится в вашем проекте в папке ресурсов. Правильно?

Вы можете получить полный путь к DLL, если DLL находится внутри папки в пути к классам, и загрузить ее, используя:

// assuming dll is located in the default package
URI dllUri = this.getClass().getResource("/mydll.dll").toURI();
File dllFile = new File(dllUri);
System.load(dllFile.getCanonicalPath());

Это не зависит от Maven. Есть только две проблемы:

  1. Решение не зависит от системы, так как вы указываете суффикс файла в параметре getResource ()
  2. Это не будет работать, если DLL находится внутри JAR. Для этого случая мы создаем JAR-экстрактор, который извлекает DLL во временную папку и вызывает System.load () с файлом во временной папке.
1 голос
/ 16 декабря 2010

Может быть, это должен быть более общий вопрос:

Есть ли способ добавить DLL к ВМ, не указывая ее через путь к библиотеке?

I 'мы где-то читали, что помещение dll в корень приложения и указание библиотеки DLL в файле MANIFEST.MF с ее хеш-кодом запускает виртуальную машину для ее автоматического подбора.Хотя это может быть совершенно неправильно.

...