Экранирование свойства в pom.xml

#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   }
  

и, по крайней мере, будет выглядеть правильно.