Muszę rozpakować plik war w katalogu tomcat/webapps za pomocą skryptu ANT build. Nazwa pliku wojny nie jest ustalona. Jak mogę go rozpakować w katalogu, którego nazwa jest taka sama jak nazwa pliku wojennego. Wiem, jak rozpakować plik, ale problem polega na tym, że rozpakowuje zawartość w określonym katalogu docelowym. Co jeśli nie znam nazwy katalogu?

Przed kompilacją:

tomcat/webapps/
   myApp-0.1.war

Po kompilacji:

tomcat/webapps
   myApp-0.1/
   myApp-0.1.war
ant
4
bluetech 29 sierpień 2012, 01:20

2 odpowiedzi

Najlepsza odpowiedź

Dobra robota bluetech. Twoje rozwiązanie może być również wyrażone w następujący sposób:

<target name="unwar-test">
  <property name="webapps.dir" value="tomcat/webapps" />

  <fileset id="war.file.id" dir="${basedir}"
      includes="${webapps.dir}/myApp-*.war" />
  <property name="war.file" refid="war.file.id" />

  <basename property="war.basename" file="${war.file}" suffix=".war" />
  <property name="unwar.dir" location="${webapps.dir}/${war.basename}" />
  <mkdir dir="${unwar.dir}" />
  <unwar dest="${unwar.dir}" src="${war.file}" />
</target>
3
Community 23 maj 2017, 15:27

Więc po zapoznaniu się z niektórymi zadaniami Ant, oto, co wymyśliłem:

<!-- Get the path of the war file. I know the file name pattern in this case -->
<path id="warFilePath">
    <fileset dir="./tomcat/webapps/">
        <include name="myApp-*.war"/>
    </fileset>
</path>

<property name="warFile" refid="warFilePath" />

<!-- Get file name without extension -->
<basename property="warFilename" file="${warFile}" suffix=".war" />

<!-- Create directory with the same name as the war file name -->
<mkdir dir="./tomcat/webapps/${warFilename}" />

<!-- unzip war file -->
<unwar dest="./tomcat/webapps/${warFilename}">
    <fileset dir="./tomcat/webapps/">
        <include name="${warFilename}.war"/>    
    </fileset>
</unwar>

Daj mi znać, czy jest na to lepszy sposób. Znalazłem również rozwiązanie dotyczące stackoverflow przy użyciu ant-contrib, ale tego nie szukałem.

4
Community 23 maj 2017, 14:49