只使用ant运行NetBeans项目

20

我有一个使用Netbeans构建的样例代码。

它有一个build.xml文件,所以我下载了ant并尝试运行它。

我收到了这个错误消息:

...... nbproject\build-impl.xml:76: Platform is not correctly set up

根据我所看到的,解决这个问题的方法是“简单地”下载Netbeans并从中运行示例,但是...我不想安装它来运行一个包含10个文件的示例。

有没有绕过的方法可以在Java中运行Netbeans项目?我需要修改哪个正确的.properties文件呢?

7个回答

12

使用Java/ANT直接运行NetBeans生成的项目是可能的,但您可能需要手动设置一些属性和/或添加jar文件路径。

不幸的是,NetBeans倾向于使用自己的JAR文件包括taskdef,并引用仅在/nbproject/private/private.properties文件中定义的属性,这些属性通常在您第一次打开NetBeans项目时设置,或者在您编辑IDE中的项目时进行修改。

如果您检查build-impl.xml,则应该能够找到属性并推导出需要设置的值(操作系统平台),然后可以选择:

  • /nbproject/private.properties中创建/设置属性
  • 在父级build.xml中添加该属性定义
  • 在调用您的ant目标时使用命令行传递-DPlatform=Foo

个人而言,我喜欢NetBeans生成的ANT文件和目标的结构,但讨厌他们加入的大量定制/专有内容,这使得在没有NetBeans的情况下难以运行。

例如:

ant -Dplatforms.JDK_1.7.home=/opt/jdk 

嗯,我知道我必须手动设置“一些”属性,我做的第一件事是打开build-impl.xml文件(第二件事是谷歌错误消息,第三件事是在这里发布)。结果我不知道要设置什么属性以及如何设置。期望的值是什么或应该修改什么。感谢您的回答,但...嗯,没有太大帮助:( - OscarRyz
Oscar,没有查看build-impl.xml文件的属性和值设置是很难猜测的。能否把它发布出来? - Mads Hansen

4
我刚刚使用ant成功构建了NetBeans项目。 这是我所做的事情:
  • <NetBeans-folder>/java2/ant复制到“无NetBeans”的计算机上
  • 将nbproject/project.properties复制到例如ant.properties
  • 用其值替换ant.properties中的每个${}表达式
  • 添加platform.<platform-name>.home=<path to platform>
  • 将libs.CopyLibs.classpath=<path to nb-ant>/extra/org-netbeans-modules-java-j2seproject-copylibtask.jar添加进去
  • 将其他所需的类路径添加到javac.classpath中(例如,servlet-api.jar的路径)
  • ant -propertyfile ant.properties
它可以工作,但并不令人满意。 我希望能找到重复使用project.properties的方法,或自动将其转换为“已解决”版本(第3步)。 构建然后可以自动化。

1
我刚刚在我的NetBeans 7.0项目中完成了这个练习。我所能做的就是从我的Windows系统上的.netbeans\7.0目录中复制我的build.properties文件,并为我的构建服务器创建一个server.properties文件。这并不需要太大的努力,因为每个开发人员的build.properties可能会有所不同,因此为服务器创建另一个文件是可以预期的。然后,我编写了一个简单的server-build.xml文件,引用了这个文件,并只执行init、compile、dist和clean的基本操作。我将这两个文件提交到了我的CVS存储库中,位于项目目录的顶层,因为它们不会与其他项目文件冲突,并且在需要更新时作为提醒。现在,我可以使用“ant -f server-build.xml”在我的CI服务器上构建我的项目,一切都正常工作。
我的整个init部分看起来像这样,给我的服务器路径优先级,但包括NetBeans项目属性中必要的信息。
<target name="init">
    <property file="server.properties"/>
    <property file="nbproject/project.properties"/>
</target>

当我为我的嵌套项目定义ant任务时,我也需要做类似的事情:

<target name="compile">
    <ant antfile="${project.MyProj-common}/build.xml" inheritall="false" target="jar">
        <property location="${build.dir}" name="dist.ear.dir"/>
        <property file="server.properties"/>
        <property file="${project.MyProj-common}/nbproject/project.properties"/>
    </ant>
    ...
</target>

我不得不将 j2ee.platform.classpath 从 project.properties 复制到我的 server.properties 文件中,以确保对 j2ee.server.home 的引用按照我需要的方式解析。我没有预料到需要这样做,但否则 classpath 是错误的,导致构建失败。

感谢您提供有关此问题的信息,它帮助我找到了解决方案。


1

我刚刚遇到了同样的问题。 希望我可以通过放弃netbeans而转向eclipse和maven来解决这个问题。

但是这里有一个很好的链接可以将从netbeans构建的项目导出到持续集成服务器(或任何其他IDE)中。

技术正在取得进展。以下是摘要:

  1. 在CI服务器上安装netbeans(安装程序上有不使用GUI的选项,使用-silent
  2. 在SVN中包含nbproject
  3. 将私有文件夹添加到忽略列表中
  4. 在CI服务器上创建自己的私有文件夹
  5. 使其指向您的CI帐户中模拟私有用户文件夹的文件夹
  6. 将用户的实际文件夹从一个文件夹复制到此文件夹,并更改每个路径(替换字符串)以指向您CI服务器上的netbeans安装。

然后它应该能够正常工作。


0

我正在使用Netbeans 6.8和使用Netbeans创建的Java项目可以通过cli上的ant自动生成的构建文件运行。所有常规目标,如ant compileant runant clean等都“只需工作”。(如果有影响的话,我正在使用Fedora 13)


你没有理解重点,问题是如何在没有NetBeans的情况下(例如持续集成服务器),使用Ant运行构建文件。 - Snicolas
@Snicolas,这正是我所做的(使用Jenkins)。也许你由NetBeans生成的ant文件对NetBeans本身有一些有趣的依赖关系。但对我来说并非如此情况。 - Leif Gruenwoldt
由于我们使用移动平台,我们有很多依赖关系。因此,我们处于我指出的文档的第2种情况,而你,幸运的是,处于第1种情况。 - Snicolas

0

只是想补充Mads'的答案...通常来说,在目标机器上安装并打开Netbeans至少一次。ANT项目还依赖于USERDIR/.netbeans/...目录中的一些设置。这在6.5+版本中可能已经改变了。

这将配置一些基本设置,并定义类路径到Netbeans jars。如果您的依赖项(例如库)或项目自上次在Netbeans中打开项目以来从不同的目录运行,您需要调整private.properties文件中的一些设置,就像Mads'所描述的那样。


1
我想我得下载50-120MB的Netbeans(我不知道具体大小)才能运行那区区5KB的Java文件:(:(...算了,我直接用命令行编译它们也行。 - OscarRyz

-1

你可以使用这个仓库 https://github.com/albfan/ant-netbeans 来实现这个目的。

它克服了 NetBeans 包装的 Ant 配置的所有奇怪之处,所以你只需要:

进行编译:

$ ant.sh compile

运行:

$ ant.sh run

无论什么(自动完成):

$ ant.sh <tab><tab>

欢迎提供解决方案的链接,但请确保您的答案即使没有链接也是有用的:在链接周围添加上下文,以便其他用户了解它的内容和原因,然后引用您链接的页面中最相关的部分,以防目标页面不可用。仅仅提供链接的答案可能会被删除。 - Petter Friberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接