2012-06-12 3 views
1

У меня есть ситуация, когда мы обертываем банку JSmooth, чтобы получить подходящий exe-файл.maven -> ant -> jsmoothgen: Как обеспечить -Djava.awt.headless = true?

Это традиционно было построено муравьем, и в качестве части нашего общего уклонения текущим краткосрочным решением было использование maven-antrun-plugin для установки свойства и вызова муравья.

К сожалению, этот подход не подходит при создании Unix (поскольку нет дисплея X11), и решение должно вызвать JVM с помощью -Djava.awt.headless=true. Я хотел бы сделать это в моем pom.xml, но не могу определить, где это сделать.

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <configuration> 
       <target> 
        <!-- create one-jar and exefy it --> 
        <property name="maven.project.build.finalName" value="${project.build.finalName}" /> 
        <!-- note: fails on headless Linux for now --> 
        <ant /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Это нормально, чтобы развернуть новую JVM напрямую, но не полагаться на специфику платформы.

Как я могу сделать это правильно?

+0

Можете ли вы предоставить содержимое файла ant 'build.xml', который вы вызываете? –

ответ

2

В руководстве пользователя муравей есть раздел «Running Ant via Java», в котором показано, как сделать то, что вы хотите. Немного подправили версию своего примера приводится ниже:

<java 
     classname="org.apache.tools.ant.launch.Launcher" 
     fork="true" 
     failonerror="true" 
     dir="${basedir}" 
     taskname="headless-ant" 
> 
    <classpath> 
     <pathelement location="${ant.home}/lib/ant-launcher.jar"/> 
    </classpath> 
    <arg value="-buildfile"/> 
    <arg file="${ant.file}"/> 
    <arg value="-Dbasedir=${basedir}"/> 
    <jvmarg value="-Djava.awt.headless=true"/> 
</java> 

Если поместить этот фрагмент вместо <ant> элемента в вашем фрагменте кода, он должен сделать трюк.

+0

Большой обходной путь! Это немного странно, но он выполнит запрос :). –

+1

Необходимо использовать '

+0

Исправлено это, спасибо. –

5

Насколько я знаю, решение без запуска виртуальной машины Java заключается в использовании MAVEN_OPT

export MAVEN_OPTS="-Djava.awt.headless=true" 

Поскольку -D опция JVM, вы должны были указать его непосредственно Maven. Вы не можете (еще раз, из того, что я знаю) передать его как внутренний аргумент (и его нет в конфигурации)

Таким образом, использование параметра MAVEN_OPT станет правильным способом.

EDIT 1:

Вы можете иметь взгляд здесь, используя более-Maven2-antrun-плагин

http://code.google.com/p/better-maven2-antrun-plugin/wiki/Usage

EDIT 2: Может может, может помочь maven-antrun developmentpement, предоставляя им способ указать эти параметры, например ma ven-compiler-plugin. Это было бы наилучшим способом, если вы действительно хотите использовать информацию о помпе.

+0

@ ThorbjørnRavnAndersen - Я думаю, что раздел «Настройка параметров JVM» на связанной странице описывает экстренно то, что вы ищете. – Attila

+0

Я не хочу использовать MAVEN_OPTS, я хочу это в моем pom.xml. Я посмотрю на новый антран. –

+0

После дальнейших поисковых запросов, похоже, что maven-ant-run plugin действительно не имеет параметров для указания опции jvm. Я ищу, но я уверен, что с этим нет никакого решения. –