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。为额外的输入添加了标签
# 1 楼答案
我没有深入到很多特定于项目的细节,而是研究并使用ant来编译我的项目。最后,它不需要一直到一个罐子。蚂蚁使得制作一个罐子变得足够容易,所以它也做得很好。创建的jar不是可执行的,因为存在运行selenium的项目,因此没有真正的“main”可执行
我没有使用Warman的答案,因为我可以假设项目会增长,我不想在开发过程中有一个步骤来更新构建,以便使用每个新文件进行测试
我将这两个项目作为单个项目导入IntelliJ,并重新构造了生成的代码,以便将正确的目录标记为代码根目录和测试根目录。我还添加了selenium服务器和java JAR作为项目的一部分(与我的盒子上其他地方存在的库不同),以便IntelliJ在编译时能够使用它
然后,我使用IntelliJ的Generate Ant Build创建了一个默认脚本。这是经过几天的调整,以排除/包括需要就位和使用詹金斯奴隶环境的更具体的文件
对于将来发现这个问题的人:研究蚂蚁并手工创建脚本。将编译、jar和运行junit测试这两个项目组合在一起的单个ant脚本大约有250行,这可以被真正理解ant的人减少
祝你好运
# 2 楼答案
我能想到的一件事是,您可以继续使用javac来实现这一点,而不是添加。命令行中的jar依赖项,如selenium jar等,您可以使用。sh文件,该文件将设置环境变量,例如:
按照下面的方式添加所有依赖的jar,然后调用它。在运行任何javac命令之前,请先下载sh文件
说
在我的项目中,这对我来说很好,不需要转换为可执行jar。只需要弄清楚依赖者是谁。类文件
希望这有帮助