Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse类路径条目仅用于测试_Java_Eclipse_Unit Testing_Classpath - Fatal编程技术网

Java Eclipse类路径条目仅用于测试

Java Eclipse类路径条目仅用于测试,java,eclipse,unit-testing,classpath,Java,Eclipse,Unit Testing,Classpath,在Maven中,可以有编译时依赖项和测试依赖项。这是一个我喜欢的特性,M2Eclipse插件也让它在Eclipse中可用,这非常好。因此,如果我将jmock.jar作为测试依赖项添加到我的项目中,它将显示在JUnit测试的类路径上,但在调试应用程序本身时不会出现 这正是我现在想要实现的,但没有M2Eclipse或Maven。在纯Eclipse中有没有这样做的方法?(可能不安装任何插件。)您可以将所有测试分离到另一个项目中,并将主项目作为依赖项添加(项目->属性->Java构建路径->项目-/st

在Maven中,可以有编译时依赖项和测试依赖项。这是一个我喜欢的特性,M2Eclipse插件也让它在Eclipse中可用,这非常好。因此,如果我将
jmock.jar
作为测试依赖项添加到我的项目中,它将显示在JUnit测试的类路径上,但在调试应用程序本身时不会出现


这正是我现在想要实现的,但没有M2Eclipse或Maven。在纯Eclipse中有没有这样做的方法?(可能不安装任何插件。)

您可以将所有测试分离到另一个项目中,并将主项目作为依赖项添加(项目->属性->Java构建路径->项目-/strong>添加…

更新:为了避免更改原始项目结构,您的测试项目可以使用链接位置

按照正常方式创建测试项目,您现在需要创建一个链接的资源来引入src/test/java文件夹。最好使用一个变量来创建它,这样您的项目就可以保持一定的平台独立性。 要创建新的链接文件夹,请选择new->文件夹,在文件夹名称:字段中输入src,然后单击高级>>

单击链接到文件系统中的文件夹 单击变量…
打开选择路径变量对话框

如果这是您的第一次,或者您正在链接到一个新位置,请选择new…,并为变量指定一个合理的名称和路径。如果所有项目都位于c:\workspaces\foo**中,那么调用变量**WORKSPACE\u ROOT并为其指定路径是有意义的。如果您有其他约定,这很好,但是在.project文件中添加注释是有意义的,这样某人就有机会知道正确的值应该是什么

假设上述值,您现在可以在输入字段上设置值WORKSPACE\u ROOT/[subject project name]/src

确认应该看到带有小箭头的src文件夹后,如果查看.project文件,请参见以下内容:

<linkedResources>
    <link>
        <name>src</name>
        <type>2</type>
        <locationURI>WORKSPACE_ROOT/esf-ns-core-rp/src</locationURI>
    </link><!--NOTE the WORKSPACE_ROOT variable points to the folder containing the subject project's sandbox-->
</linkedResources>
<linkedResources>
    <link>
        <name>src/test/java</name>
        <type>2</type>
        <locationURI>WORKSPACE_ROOT/my-project/src/test/java</locationURI>
    </link>
</linkedResources>

src
2.
工作区\u根/esf ns核心rp/src
现在,您可以像往常一样添加src/test/java文件夹作为源位置

注意:通过将配置更改为以下内容,您还可以仅共享src/test/java文件夹:

<linkedResources>
    <link>
        <name>src</name>
        <type>2</type>
        <locationURI>WORKSPACE_ROOT/esf-ns-core-rp/src</locationURI>
    </link><!--NOTE the WORKSPACE_ROOT variable points to the folder containing the subject project's sandbox-->
</linkedResources>
<linkedResources>
    <link>
        <name>src/test/java</name>
        <type>2</type>
        <locationURI>WORKSPACE_ROOT/my-project/src/test/java</locationURI>
    </link>
</linkedResources>

src/test/java
2.
工作区\u ROOT/my project/src/test/java
这使您可以对配置进行更多的控制,但是您必须对src/test/resources、src/it/java等进行重复

然后,仅在测试项目中设置所有测试依赖项


非常不漂亮,但它确实可以工作(我也使用过这种方法,其中我的测试符合性级别与主要的符合性级别不同,例如,1.5用于测试,1.4用于目标环境).

实际上,如果您在eclipse中查看Maven是如何集成依赖项的,那么它不会对测试或运行时依赖项产生影响,因为您的测试库总是可以访问的

如果Maven能够控制该部分的执行,那么Maven在打包应用程序和生成运行时类路径时将保持差异。当涉及eclipse时,Maven只是毫无疑问地将它们全部添加到eclipse构建路径中


你为什么要这样把它分开?这对你有什么帮助?

恐怕答案是你做不到。有两个与您的问题相关的未解决问题从3.5推迟:


因为您同时使用Eclipse和Maven,所以可以解决它。
创建一个新的“Maven Build”运行配置,目标为“exec:java”,参数为“exec.mainClass=com.example.Starter”。通过这种方式,类路径将由Maven计算。

Eclipse光子最终添加了此功能,并支持m2e。

我正在一个由许多人开发的大型应用程序中进行此操作。我希望我们能很快迁移到Maven,因此我不介意那些肮脏的把戏(一旦我们在Maven/M2Eclipse上,这些把戏就可以被删除),但是现在修改项目结构已经超出了范围如果您不使用M2Eclipse插件,这与您描述的一样。但安装了插件后,依赖范围确实得到了强制执行。我需要这种分离,因为我希望在测试和运行时使用单独的日志实现。由于SLF4J使用SPI来定位实际的实现,我认为在类路径上添加两个不是一个好主意。我想maven builder比当时宣传的更神奇。好的,根据我在这里看到的,你现在最好的选择(直到你得到Maven)是在保持文件夹结构完整的同时,按照下面的Rich所述修改你的项目结构。在这种情况下,如果您还不喜欢,那么您最好立即开始执行maven布局约定,这将简化以后的转换。。。谢谢我曾经创造我自己的包装,虽然我的需求是温和的,我从来没有寻求其他解决方案。thanksIt是一个4年前的答案,但我使用的是STS 3.6.4(Luna 4.4.2),它有问题,这个解决方法非常好。在我的测试中,我有一个虚拟@Service,它实现了与真实接口相同的接口,当测试类中的eclipse捆绑包无法选择使用哪个服务实现时,Spring会选择使用哪个服务实现。“需要单个匹配bean,但找到2个。”