#java #maven-2 #launch4j
#java #maven-2 #launch4j
Вопрос:
Я хотел бы избежать свойства в pom.xml . Не в ресурсах, я знаю, что это возможно с помощью фильтра. Например, я пытаюсь использовать плагин launch4j следующим образом :
<plugin>
<groupId>org.bluestemsoftware.open.maven.plugin</groupId>
<artifactId>launch4j-plugin</artifactId>
<executions>
<execution>
<id>l4j-cli</id>
<phase>install</phase>
<goals>
<goal>launch4j</goal>
</goals>
<configuration>
<headerType>console</headerType>
<outfile>../out.exe</outfile>
<dontWrapJar>true</dontWrapJar>
<jar>./../out.jar</jar>
<icon>../icon.ico</icon>
<chdir>.</chdir>
<customProcName>true</customProcName>
<downloadUrl>http://www.oracle.com/technetwork/java/javase/downloads/index.html</downloadUrl>
<classPath>
<mainClass>com.stack.Main</mainClass>
<addDependencies>true</addDependencies>
<jarLocation>./lib</jarLocation>
</classPath>
<jre>
<opts>
<opt>-DconfigBasePath=${ALLUSERSPROFILE}/dir</opt>
</opts>
</jre>
</configuration>
</execution>
</executions>
</plugin>
И ${ALLUSERSPROFILE} должны интерпретироваться не maven, а программой, сгенерированной launch4j.
Я пытаюсь :
${ALLUSERSPROFILE}
\${ALLUSERSPROFILE}
$${ALLUSERSPROFILE}
и
<properties>
<dollar>$</dollar>
</properties>
${dollar}{ALLUSERSPROFILE}
но ничего не работает.
Комментарии:
1. Согласно этому потоку ,
$${ALLUSERSPROFILE}
должно работать.2. Я видел этот поток, но он не работает
3. Опубликуйте полный POM, который работает «из коробки», и воспроизведите ошибку.
4. u0024 работает для меня
Ответ №1:
$$
для меня это сработало ${surefire.forkNumber}
.
Ответ №2:
Я добавляю ту же проблему, когда хотел отфильтровать свой файл log4j.properties, разрешив ключ ‘$ {log4j.dir}’ значением свойства pom ‘$ {user.home}’.
Ни взлом $$ {key}, ни взлом $ {dollar} {key} не сработали для меня. Мне, наконец, удалось сделать это, используя шестнадцатеричную нотацию для $ char в свойстве pom.
<project>
<properties>
<log4j.dir>u0024{user.home}</log4j.dir>
</properties>
<!--...-->
</project>
Ответ №3:
Следующее, слегка измененное из приведенного выше потока, сработало для меня:
<properties>
<dollar>$</dollar>
<dollar.bloop>${dollar}{bloop}</dollar.bloop>
</properties>
$$
не был распознан IntelliJ. Я действительно хочу, чтобы в редакторе не
было красных закорючек.- С
u0024
буквальной обратной косой чертой было перенесено, и ни в коем случае не было заменено на $.
YMMV, я полагаю.
Комментарии:
1. Ни с Maven 3.6.0
2. Единственный, который работал для меня, используя Maven 3.5.2
Ответ №4:
Для истинного экранирования в a pom.xml
вам не повезло.
В некоторых ответах выше содержится ссылка на плагин Surefire, который использует свой собственный синтаксис для экранирования. Это не одно и то же.
Фильтрация ресурсов Maven использует свой собственный механизм для экранирования. Это не одно и то же.
Если вам просто нужно что-то напечатать, вы можете использовать символ unicode с нулевой шириной пробела, например:
$amp;#8203;{somePomProperty}
Это будет отображаться как:
$ zero-width-space { somePomProperty }
и, по крайней мере, будет выглядеть правильно.