当前位置: 首页 > 面试题库 >

如何在Maven中使用不同的JAR进行编译和测试?

杜轩昂
2023-03-14
问题内容

我针对javaee-api编译了程序。但是,对于Junit测试,我必须使用特定的实现(例如glassfish的javaee.jar)来避免类似java.lang.ClassFormatError的错误:类文件javax / persistence / Persistence中不是本机或抽象的方法中的缺少Code属性(另请参见1)。

因此,请避免使用仅在glassfish实现中可用的方法,我想使用常规api编译我的工件,但要使用实现jar运行junit。但是两者都提供相同的命名类和接口,因此类加载器会遇到麻烦。

解决此问题的最佳方法是什么?我可以用Maven解决这个问题吗?

非常感谢


问题答案:

我认为这是可能的。实际上,从版本2.0.9开始,Maven使用POM顺序来构建类路径,因此您现在就可以对其进行操作。而且,如果将此与Dependency Scope结合使用,则应该有可能实现您想要的。实际上,如果你把GlassFish的javaee依赖(与测试范围)前的javaee-api依赖关系,前者应前后来在测试类路径,从而通过单元测试中使用,而后者将在编译过程中使用放置。从理论上讲,这应该可行,但它有点脆弱,因此需要仔细记录。

这样的东西(带有虚构的GFv3 jar):

<dependencies>
  <dependency><!-- this one will be first on the test classpath -->
    <groupId>org.glassfish</groupId>
    <artifactId>javaee</artifactId>
    <version>6.0</version>
    <scope>test</scope>
  <dependency>
  <dependency><!-- this one will be used during compile -->
    <groupId>javax.javaee-api</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
  <dependency>
  ...
</dependencies>


 类似资料:
  • 问题内容: 在NetBeans 7.2中,我很难找到如何在Maven项目中使用-Xlint:unchecked进行编译。在Ant项目下,可以通过转到Project Properties-> Compiling来更改编​​译器标志,但是Maven项目似乎没有任何此类选项。 有什么方法可以使用Maven将IDE配置为使用此类标志进行编译? 问题答案: 我猜您可以在pom.xml中设置编译器参数。请参考

  • 我在sbt中有一个项目,希望编译多个jar,这些jar都包含一个不同的主类,可以提交给spark。由于这种jar非常多,并且大多数jar都有一些共同的依赖项,因此不方便将它们拆分为不同的子项目。所有这些主类源文件都位于同一目录中,例如src/main/scala/com下。xx。yy。那么如何编写构建。sbt将所有主类编译成不同的JAR或按主类的名称编译,就像编译不同的子项目一样。请帮忙,sbt很

  • 问题内容: 我在编译代码时收到一条消息: 如何重新编译? 问题答案: 在javac的命令行上指定它: javac -Xlint:unchecked 或者,如果您使用的是Ant,请修改您的javac目标 如果您使用的是Maven,请在

  • 由于IntelliJ,我发现需要将以下选项传递给:

  • 问题内容: 调试时,我会收到一条警告消息,说明异常-我如何设置在netbeans中使用-g进行编译? 谢谢 问题答案: 据我所知,您 自己的 代码是用调试信息编译的。但是,Java运行时库 不是 。 请仔细检查您看到此消息的位置是否在您自己的代码中,而不是在运行时库中。

  • 我是自动化UI测试的新手,我正在使用Cucumber和Selenium研究UI自动化。 所以在我的项目中,我创建了一个钩子类来设置web驱动程序进行测试。类似这样的事情: 但是如果我想用不同的浏览器和不同的环境运行相同的测试。例如,我想用chrome和环境A运行测试,用firefox和环境B运行相同的测试。我计划为不同的环境创建两个属性文件