【问题标题】:excluding one class from a war using ant使用蚂蚁从战争中排除一个阶级
【发布时间】:2013-03-27 22:17:31
【问题描述】:

我有一个使用 RMI 的 Web 应用程序,因此它包含 RMI 接口类但不包含它的实现。为了避免在两个地方重复接口定义,我试图将 RMI 服务器代码保留在 Web 应用程序的 Eclipse 项目中;但是 RMI 服务器类必须从 war 文件中排除,因为它有一个 main() 方法。 build.xml 中的 jar 任务和 .spec 用于为 RMI 服务器守护进程制作 RPM。

我尝试在战争任务中使用排除子句,然后在课程中,

    <war webxml="${web.dir}/WEB-INF/web.xml" destfile="${dist.dir}/${ant.project.name}.war">
    <classes dir="${build}" excludes="**/RMIServer.class" />
        <fileset dir="${web.dir}" />
        <manifest>
            <attribute name="Built-Date" value="${TODAY}" />
            <attribute name="Built-By" value="${user.name}" />
        </manifest>
    </war>

然后在文件集中:

    <war webxml="${web.dir}/WEB-INF/web.xml" destfile="${dist.dir}/${ant.project.name}.war">
        <classes dir="${build}" />
        <fileset dir="${web.dir}" >
            <exclude name="**/RMIServer*.class"/>
        </fileset>
        <manifest>
            <attribute name="Built-Date" value="${TODAY}" />
            <attribute name="Built-By" value="${user.name}" />
        </manifest>
    </war>

但我一直无法让它工作 - 服务器类仍在战争/WEB-INF/classes/...

我怎样才能做到这一点?或者,这个单一项目的目标是不明智的吗?

【问题讨论】:

  • 也许显示您的排除尝试,并说明它以什么方式不起作用?有人可能会建议如何解决这个问题。
  • Question 与 RMI 无关。
  • 未测试,但在此代码中excludes="**/RMIServer.class" 我认为应该只是exclude,最后没有s

标签: java eclipse ant


【解决方案1】:

&lt;classes&gt; 你的文件集。对于类文件,您不需要同时使用 &lt;classes&gt;&lt;fileset&gt;。我认为正在发生的事情是,当您将其排除在一个之外时,它就会被另一个包含。

【讨论】:

  • 谢谢@whiskeyspider!我没有意识到这一点,而这正是我需要知道的。在尝试了几个版本后,结果发现这个得到了正确的结果:
  • 移除 还修复了每个类在 war/WEB-INF/classes/ 中出现两个副本的神秘问题。再次感谢。
【解决方案2】:

你的最后一句话呼应了我的想法。如果我有一个 Web 服务器和一个 RMI 服务器,我会将它们放入单独的项目中,即使其中一个调用另一个。我可能会使用 Maven 或类似的东西来帮助我。

现在我会非常惊讶地发现一个项目将两个不同的服务器进程实现放在一个 Eclipse/IDEA/Maven/Ivy/other 项目中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多