有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajavac为Jenkins编译一个包含Selenium的完整项目

背景:我正在使用jUnit运行Selenium测试。我试着让我的测试每晚和詹金斯一起运行。我可以每晚提取测试/源文件,并可以构建和安装我的产品。我试图在linux虚拟机上使用Jenkins中的“Execute Shell”选项构建java测试文件

我有一个Java项目,它由一个共享实用程序项目、selenium JAR以及我的源代码和测试文件组成。我可以在NetBeans中毫无问题地运行selenium测试

代码的布局类似于:

公用事业项目:

src
-> utilities
    -> UtilityFunctions.java
    -> Logger.java

我的项目

misc
-> XmlConfigFileForTest.xml
-> PasswordFileForTest.txt    
src
-> objects
    -> User.java
    -> ConfigFile.java
test
-> coreTest
    -> coreTest1.java
    -> coreTest2.java
-> setupTest
    -> setupTest1.java
    -> setupTest2.java
-> testSuites
    -> runAllSetupTests.java

我不知道如何运行javac,这样它就会生成一个jar,我可以用它来运行测试

我尝试过:

使用How to set environment variables for javac to be able to find imported packages?我可以把我的硒罐放进去

一旦我的代码被编译,我相信我可以运行像How to run JUnit test cases from the command line这样的测试

我最新的javac是:

javac -classpath selenium-java.jar:selenium-server-standalone.jar -sourcepath code -d build/classes code/test/testSuites/runAllSetupTests.java

由于找不到包“objects”,因此该操作当前失败。我非常有限的理解是,试图javac一个文件应该导致它拉入所有包含的文件

问题1:有没有一种方法可以将javac(或另一个标准程序)指向这样的结构化项目,然后从中取出jar? 问题2:有更好的方法吗?我这样做是为了每晚和詹金斯一起进行硒测试。我不赞成使用javac来编译它

编辑:

目前正在尝试直接使用Ant而不是javac。为额外的输入添加了标签


共 (2) 个答案

  1. # 1 楼答案

    我没有深入到很多特定于项目的细节,而是研究并使用ant来编译我的项目。最后,它不需要一直到一个罐子。蚂蚁使得制作一个罐子变得足够容易,所以它也做得很好。创建的jar不是可执行的,因为存在运行selenium的项目,因此没有真正的“main”可执行

    我没有使用Warman的答案,因为我可以假设项目会增长,我不想在开发过程中有一个步骤来更新构建,以便使用每个新文件进行测试

    我将这两个项目作为单个项目导入IntelliJ,并重新构造了生成的代码,以便将正确的目录标记为代码根目录和测试根目录。我还添加了selenium服务器和java JAR作为项目的一部分(与我的盒子上其他地方存在的库不同),以便IntelliJ在编译时能够使用它

    然后,我使用IntelliJ的Generate Ant Build创建了一个默认脚本。这是经过几天的调整,以排除/包括需要就位和使用詹金斯奴隶环境的更具体的文件

    对于将来发现这个问题的人:研究蚂蚁并手工创建脚本。将编译、jar和运行junit测试这两个项目组合在一起的单个ant脚本大约有250行,这可以被真正理解ant的人减少

    祝你好运

  2. # 2 楼答案

    我能想到的一件事是,您可以继续使用javac来实现这一点,而不是添加。命令行中的jar依赖项,如selenium jar等,您可以使用。sh文件,该文件将设置环境变量,例如:

    CLASSPATH=:./Number1.jar:./Number2.jar:./Number3.jar ...
    export CLASSPATH
    

    按照下面的方式添加所有依赖的jar,然后调用它。在运行任何javac命令之前,请先下载sh文件

    setpath.sh 
    javac -classpath <mention only .class required from the project to commplie this file> JavaFile1.java
    javac -classpath <mention only .class required from the project to commplie this file> JavaFile2.java
    javac -classpath <mention only .class required from the project to commplie this file> JavaFile3.java ...
    .
    .
    
    javac -classpath <mention only .class required from the project to commplie this file> MainJavaFile.java
    
    Java -classpath <all class file required> MainJavaFile
    

    在我的项目中,这对我来说很好,不需要转换为可执行jar。只需要弄清楚依赖者是谁。类文件

    希望这有帮助