当我尝试运行以下build.xml文件以在eclipse中使用我的java应用程序中的mysql时,我收到以下错误消息:
建筑失败
d:\ mypath \ workspace \ appname \ database \ build.xml:14:执行失败:java.io.IOException:无法运行程序“mysql”:CreateProcess error = 2,系统找不到指定的文件
以下是build.xml的代码:
<?xml version="1.0" encoding="UTF-8"?>
<project name="publisher" default="all" basedir=".">
<property name="mysql.params" value="-u publisher -ppublisher -D publisher" />
<target name="all" depends="cleandb, createdb, insertdb"></target>
<target name="cleandb">
<exec executable="mysql" input="cleandb.sql">
<arg line="${mysql.params}" />
</exec>
</target>
<target name="createdb">
<exec executable="mysql" input="createdb.sql">
<arg line="${mysql.params}" />
</exec>
</target>
<target name="insertdb">
<exec executable="mysql" input="insertdb.sql">
<arg line="${mysql.params}" />
</exec>
</target>
</project>
从eclipse开始,我将文件作为“Ant Build ...”运行,并且首先调用createdb.sql。因此,投掷的线是被要求执行的第一行,即:
问题似乎是脚本无法找到mysql。从windows命令行,我可以使用以下路径调用数据库的实例:
d:\ mypath \ MySQL \ MySQL Server \ bin \ mysqld
我认为xml文件需要指定mysql安装的路径,但是我不知道如何在传递上面代码中所需的参数的同时做到这一点。这是我第一次使用Ant和mysql,所以语法对我来说是新的。
有谁能告诉我如何修复上面的代码,以便它可以找到我的数据库?
编辑:
我按照了whiskeyspider的建议并编辑了我的代码,成为以下内容:
-- I had a bunch of code here that I am now omitting for brevity because
-- there is a newer, revised version of the code in the second edit below.
它可能会帮助一些读者知道我正在尝试使用this tutorial中的代码。区别在于我使用的是5.6版的mysql和版本:Juno Service Release 1 构建id:20120920-0800的Eclipse。本教程使用两个应用程序的旧版本,这是导致混淆的原因。
第二次编辑:
我再次更改了build.xml文件以实现whiskeyspider的第二轮修正。该脚本现在可以访问mysql数据库,但下面还有另一条消息,我有一个问题。
这是新的build.xml代码,现在可以正确运行:
<?xml version="1.0" encoding="UTF-8"?>
<project name="publisher" default="all" basedir=".">
<property name="mysql.params" value="-u publisher -ppublisher -D publisher" />
<property name="mysql.exec.path" value="d:\\mypath\\MySQL\\bin\\"/>
<target name="all" depends="cleandb, createdb, insertdb"></target>
<target name="cleandb">
<exec executable="${mysql.exec.path}/mysqld" input="cleandb.sql">
<arg line="${mysql.params}" />
</exec>
</target>
<target name="createdb">
<exec executable="${mysql.exec.path}/mysqld" input="createdb.sql">
<arg line="${mysql.params}" />
</exec>
</target>
<target name="insertdb">
<exec executable="${mysql.exec.path}/mysqld" input="insertdb.sql">
<arg line="${mysql.params}" />
</exec>
</target>
</project>
以下是运行build.xml时在eclipse控制台中报告的日志:
Buildfile: d:\mypath\workspace\publisher\database\build.xml
createdb:
[exec] Warning: Using a password on the command line interface can be insecure.
insertdb:
[exec] Warning: Using a password on the command line interface can be insecure.
BUILD SUCCESSFUL
Total time: 1 second
当我需要使用密码从使用eclipse运行的ant代码进入数据库时,有人能告诉我如何通过提高安全性来解决此警告吗?具体来说,我如何更改代码以便在没有安全风险的情况下执行相同的任务?
答案 0 :(得分:2)
实现目标的最佳方法是将.../mysql/bin
文件夹添加到PATH
。
如果它不是一个选项,您可以通过属性-Dmysql.bin.dir=/path/to/mysql
指定mysql位置,然后使用<exec executable="${mysql.bin.dir}/mysql" input="cleandb.sql">
答案 1 :(得分:1)
使用可执行文件的路径创建属性:
<property name="mysql.exec.path" value="C:/path/to/it" />
您可以通过首先加载可能覆盖它的本地属性文件使其可移植,例如:
<property file="${user.home}/local.properties" /> // can override mysql.exec.path property, if necessary
<property name="mysql.exec.path" value="C:/path/to/it" /> // if not, use the default
然后像这样引用它:
<exec executable="${mysql.exec.path}/mysql" input="cleandb.sql">
<arg line="${mysql.params}" />
</exec>