无法从 NetBeans 8.0.2 中的 ant 目标 运行ning 运行 psql
Can't run psql from an ant target running in NetBeans 8.0.2
我 运行 在 Windows 7 上使用 PostgreSQL 9.2。我正在尝试 运行 Ant 目标使用带有可执行文件 属性 集的应用标签从 NetBeans 8.0.2 构建文件到 psql。我已经在正确的位置使用 postgres 用户的正确密码创建了一个 pgpass.conf 文件,我可以在命令提示符下 运行 psql 而无需输入密码。但是当我 运行 Ant 目标时,我在输出文件中收到一条错误消息,指出目标失败,因为没有提供密码。我究竟做错了什么?目标看起来像这样:
<filelist id="create-dbfiles" dir="${root}" files="createdb.sql"/>
<target name="create-db">
<apply executable="psql" addsourcefile="false" output="output.txt">
<arg value="-U postgres" />
<arg value="-w" />
<filelist refid="create-dbfiles"/>
<redirector>
<inputmapper type="glob" from="*" to="${root}\*" />
</redirector>
</apply>
</target>
a_horse_with_no_name 让我想到了 exec 标签,但尝试通过 exec
标签或 apply
标签直接 运行 psql
仍然抛出有关未提供密码的错误。然后我从cmd提示中顺利的意识到psql
运行。我开始尝试调用 cmd.exe
并将命令传递给命令行,并找到了解决方案:
<filelist id="clean-dbfiles" dir="${root}" files="cleandb.sql"/>
<target name="clean-db">
<apply executable="cmd.exe" addsourcefile="true" >
<filelist refid="clean-dbfiles"/>
<env key="PGPASSWORD" value="rootpassword"></env>
<arg value="/c"></arg>
<arg value="psql -w -U postgres -f " />
<srcfile />
</apply>
</target>
<filelist id="create-dbfiles" dir="${root}" files="createdb.sql"/>
<target name="create-db">
<apply executable="cmd.exe" addsourcefile="true" >
<filelist refid="create-dbfiles"/>
<env key="PGPASSWORD" value="rootpassword"></env>
<arg value="/c"></arg>
<arg value="psql -w -U postgres -f "/>
<srcfile />
</apply>
</target>
以下是为 postgres 数据库创建构建脚本的两个关键目标。注意以下几点:
- 运行
cmd.exe
不是 psql
直接
- 将
addsourcefile
设置为 true
因为我想为每个目标调用整洁的小型独立 SQL 文件。
- 将
apply
与 filelist
一起使用,因为对于我的 createtables
或 populate
目标,我可能有一个单独的 SQL 文件目录
- 放弃调用 pgpass.conf 文件的希望。由于某种原因,NetBeans 中的 Ant 无法访问它。求助于 PGPASSWORD 环境密钥并将其设置为所需的密码。这是 运行出于开发目的在本地进行的,因此安全性不是问题。
- 您需要将 /c 开关传递给 cmd.exe 以便您可以传递命令行。我没有将 psql 命令行分成单独的参数,因为我认为完整的行作为单个参数传递给 cmd.exe。
- addsourcefile 设置为 true,因此文件列表中的每个文件都会在 -f 开关之后附加到 psql 命令行,一切正常。
瞧!真是大惊小怪! MySql 我没有类似的困难,因为你可以直接将密码传递给命令行。
我 运行 在 Windows 7 上使用 PostgreSQL 9.2。我正在尝试 运行 Ant 目标使用带有可执行文件 属性 集的应用标签从 NetBeans 8.0.2 构建文件到 psql。我已经在正确的位置使用 postgres 用户的正确密码创建了一个 pgpass.conf 文件,我可以在命令提示符下 运行 psql 而无需输入密码。但是当我 运行 Ant 目标时,我在输出文件中收到一条错误消息,指出目标失败,因为没有提供密码。我究竟做错了什么?目标看起来像这样:
<filelist id="create-dbfiles" dir="${root}" files="createdb.sql"/>
<target name="create-db">
<apply executable="psql" addsourcefile="false" output="output.txt">
<arg value="-U postgres" />
<arg value="-w" />
<filelist refid="create-dbfiles"/>
<redirector>
<inputmapper type="glob" from="*" to="${root}\*" />
</redirector>
</apply>
</target>
a_horse_with_no_name 让我想到了 exec 标签,但尝试通过 exec
标签或 apply
标签直接 运行 psql
仍然抛出有关未提供密码的错误。然后我从cmd提示中顺利的意识到psql
运行。我开始尝试调用 cmd.exe
并将命令传递给命令行,并找到了解决方案:
<filelist id="clean-dbfiles" dir="${root}" files="cleandb.sql"/>
<target name="clean-db">
<apply executable="cmd.exe" addsourcefile="true" >
<filelist refid="clean-dbfiles"/>
<env key="PGPASSWORD" value="rootpassword"></env>
<arg value="/c"></arg>
<arg value="psql -w -U postgres -f " />
<srcfile />
</apply>
</target>
<filelist id="create-dbfiles" dir="${root}" files="createdb.sql"/>
<target name="create-db">
<apply executable="cmd.exe" addsourcefile="true" >
<filelist refid="create-dbfiles"/>
<env key="PGPASSWORD" value="rootpassword"></env>
<arg value="/c"></arg>
<arg value="psql -w -U postgres -f "/>
<srcfile />
</apply>
</target>
以下是为 postgres 数据库创建构建脚本的两个关键目标。注意以下几点:
- 运行
cmd.exe
不是psql
直接 - 将
addsourcefile
设置为true
因为我想为每个目标调用整洁的小型独立 SQL 文件。 - 将
apply
与filelist
一起使用,因为对于我的createtables
或populate
目标,我可能有一个单独的 SQL 文件目录 - 放弃调用 pgpass.conf 文件的希望。由于某种原因,NetBeans 中的 Ant 无法访问它。求助于 PGPASSWORD 环境密钥并将其设置为所需的密码。这是 运行出于开发目的在本地进行的,因此安全性不是问题。
- 您需要将 /c 开关传递给 cmd.exe 以便您可以传递命令行。我没有将 psql 命令行分成单独的参数,因为我认为完整的行作为单个参数传递给 cmd.exe。
- addsourcefile 设置为 true,因此文件列表中的每个文件都会在 -f 开关之后附加到 psql 命令行,一切正常。
瞧!真是大惊小怪! MySql 我没有类似的困难,因为你可以直接将密码传递给命令行。