2

Ant スクリプトでjavax.persistence.jdbc.urlは、次の persistence.xml ファイルのプロパティの値を置き換える必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="testPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>org.somecompany.domain.SomeEntity</class>
        <validation-mode>NONE</validation-mode>
        <properties>
            <property name="testprop" value="testval" />
        </properties>
    </persistence-unit>
</persistence>

XMLTask をダウンロードし、次のことを試しました。

<xmltask source="${persistence-xml-file-path}" dest="${persistence-xml-file-path}_replaced" report="true">
    <replace path="/:persistence/:persistence-unit/:properties/:property[:name/text()='testprop']/:value/text()" withText="replaced" />
</xmltask>  

残念ながら、これは機能しません。エラーは発生しません。ソースと宛先の両方の xml ファイルの内容がコンソールに表示され、それらは同じです。上記の置換命令が実行されないかのようです (または、更新するプロパティを特定しません)。

=== パトリスからの次の応答 ===========================================

これは、永続タグのスキーマ定義なしで機能するようです:

<xmltask source="${persistence-xml-file-path}" dest="${persistence-xml-file-path}_replaced" report="true" failWithoutMatch="true">
<attr path="persistence/persistence-unit/properties/property[@name='testprop']" attr="value" value="replaced"/>
</xmltask>

これは、永続タグのスキーマ定義で機能するようです:

<xmltask source="${persistence-xml-file-path}" dest="${persistence-xml-file-path}_replaced" report="true" failWithoutMatch="true">
<attr path="//*[@name='testprop']" attr="value" value="replaced"/>
</xmltask>

処理する必要がある属性は非常にユニークであるため、属性パス全体を調べる必要なく、これで問題なく機能します。

4

1 に答える 1

2

@Rao が述べたように、問題は xpath が名前空間を適切に処理していないことです。「:」を使用する構文は、一貫して機能していません。このサイトで他の多くの XmlTask​​ の回答が示されているように、//*[local-name()='persistence']代わりに構文を使用する必要があります。また、属性は@name構文で参照できます。最後に、属性の値を置き換えたい場合は<replace xpath="...、使用しないでください。<attr xpath="...

してみてください:

<xmltask source="${persistence-xml-file-path}" dest="${persistence-xml-file-path}_replaced" report="true">
   <attr path="/*[local-name()='persistence']/*[local-name()='persistence-unit']/*[local-name()='properties']/*[local-name()='property'][@name='testprop']" attr="value" value="replaced" />
</xmltask>  
于 2016-03-03T16:51:15.067 に答える