Можно ли указать путь к библиотеке в java-задаче? Как эквивалент:
java -Djava.library.path=somedir Whatever
Можно ли указать путь к библиотеке в java-задаче? Как эквивалент:
java -Djava.library.path=somedir Whatever
<propertyset>
и <syspropertyset>
должно быть тем, что вы ищете
См. также этот поток, например.
Вы можете установить их один за другим в своей задаче java ant:
<sysproperty key="test.classes.dir"
value="${build.classes.dir}"/>
tedious... или вы можете передать их как блок свойств ant:
<syspropertyset>
<propertyref prefix="test."/>
</syspropertyset>
Вы можете ссылаться на внешние системные свойства:
<propertyset id="proxy.settings">
<propertyref prefix="http."/>
<propertyref prefix="https."/>
<propertyref prefix="socks."/>
</propertyset>
а затем используйте их в своей задаче java ant: этот propertyset
можно использовать по требованию; при передаче в новый процесс все текущие свойства ant, которые соответствуют заданным префиксам, передаются вниз:
<java>
<!--copy all proxy settings from the running JVM-->
<syspropertyset refid="proxy.settings"/>
...
</java>
Я полностью упустил тот факт, что вы пытались передать свойство java.library.path
!
Как упоминалось в этот поток:
если вы попытаетесь установить его значение вне задачи java, ant игнорирует его. Поэтому я поместил все свойства, кроме этого в свой syspropertyset, и работает как ожидалось.
значение:
<property name="java.library.path" location="${dist}"/>
<propertyset id="java.props">
<propertyref name="java.library.path"/>
</propertyset>
<target name="debug">
<java>
<syspropertyset refid="java.props"/>
</java>
</target>
не будет работать, но следующее:
<target name="debug">
<java>
<sysproperty key="java.library.path" path="${dist}"/>
</java>
</target>
(хотя вы можете попробовать это, если атрибут "fork
" установлен в true, если он не работает)
(Примечание: вы не можете изменить свое значение, хотя)
Для задачи JUnit ant установите java.library.path
в разделе <junit>
<target name="test" depends="build-test">
<junit printsummary="yes" fork="true">
<sysproperty key="java.library.path"
path="path/where/your/library/is/located"/>
<!-- ... -->
</junit>
</target>
Подробнее см. ant
manual, стр. JUnit, раздел <sysproperty>
.
Остальная часть этого ответа - подробности для новичков.
public class MyFeatureTest {
@Before
public void load_library_xxxxx() {
System.loadLibrary("library_name_without_extension");
}
@Test
public void on_that_case_my_feature_does_this() {
// ...
}
}
java.library.path
в ant script<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="build" name="xxxxxx">
<!-- ... -->
<property name="lib_dir" value="path/where/your/library/is/located"/>
<!-- ... -->
<target name="test" depends="build-test">
<mkdir dir="${test_report_dir}" />
<junit printsummary="yes" fork="true">
<sysproperty key="java.library.path" path="${lib_dir}"/>
<classpath>
<pathelement location="${antlr}" />
<!-- ... -->
</classpath>
<formatter type="xml" />
<formatter type="plain" />
<batchtest todir="${test_report_dir}">
<fileset dir="${test_src_dir}">
<include name="**/*Test.java" />
</fileset>
</batchtest>
</junit>
</target>
</project>
ant
-v
, чтобы проверить java.library.path
Найдите строку типа [junit] '-Djava.library.path=
в вашем ant
, чтобы проверить наличие и значение java.library.path
. Выражение [...]
представляет текст, который был удален для ясности.
> ant test -v
[...]
test:
[mkdir] Skipping /home/user/my/dir/report because it already exists.
[junit] Implicitly adding /usr/share/ant/lib/junit.jar:[...] to CLASSPATH
[junit] Executing '/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java' with arguments:
[junit] '-Djava.library.path=/home/user/my/project/path/where/your/library/is/located'
[junit] '-classpath'
[junit] '/home/user/my/project/external/antlr.jar:[...]'
[junit] 'org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner'
[junit] 'com.example.myproject.myfeature.MyFeatureTest'
[junit] 'skipNonTests=false'
[junit] 'filtertrace=true'
[junit] 'haltOnError=false'
[junit] 'haltOnFailure=false'
[junit] 'formatter=org.apache.tools.ant.taskdefs.optional.junit.SummaryJUnitResultFormatter'
[junit] 'showoutput=false'
[junit] 'outputtoformatters=true'
[junit] 'logfailedtests=true'
[junit] 'threadid=0'
[junit] 'logtestlistenerevents=false'
[junit] 'formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,/home/user/my/dir/report/TEST-com.example.myproject.myfeature.MyFeatureTest.xml'
[junit] 'formatter=org.apache.tools.ant.taskdefs.optional.junit.PlainJUnitResultFormatter,/home/user/my/dir/report/TEST-com.example.myproject.myfeature.MyFeatureTest.txt'
[junit] 'crashfile=/home/user/my/project/junitvmwatcher4952613017772370651.properties'
[junit] 'propsfile=/home/user/my/project/junit3999929381398716397.properties'
[junit]
[junit] The ' characters around the executable and arguments are
[junit] not part of the command.
[...]
Мне удалось заставить его работать, используя переменную окружения ANT_OPTS
. Я хотел бы, чтобы это было сделано из задачи, если это возможно.