我有一个带有main类的jar,可以执行如下:java -jar test.jar
在罐子里面我有类似
的东西public static void main(String[] args) throws IOException {
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("config.properties");
Properties prop = new Properties();
prop.load(is);
//then I wanna fetch all the properties in the config.properties file
}
我同时运行:
java -jar test.jar
java -jar test.jar -cp / tmp(其中config.properties所在的位置)
java -jar test.jar -cp /tmp/config.properties(显然它不起作用,但是让我知道我想在这里实现的目标)
代码不起作用,虽然我将config.properties文件的路径放在$ PATH和$ CLASSPATH下,但三者都抛出了NPE。
关键是,从长远来看,我会将配置文件放在$ {my-config-path}中,并正确读取/处理它。但暂时我只想要快速而肮脏的东西。
答案 0 :(得分:5)
指定-jar
后,将忽略所有类路径选项。
相反,请指定默认配置位置(如在用户的主目录中)并允许在命令行上覆盖。
有各种命令行解析选项,最简单的带有选项信息的annotate类属性,例如,长和短选项名称,用法等。
或使用-D
选项并检索相应的系统属性。
另一个选项是Preferences
API。
答案 1 :(得分:0)
一个示例示例
// Render Loop.
while( !glfwWindowShouldClose( window ) )
{
// Input.
processInput( window );
// Render.
// Bind to frameBuffer and draw scene as normally would to colour texture.
glBindFramebuffer( GL_FRAMEBUFFER, frameBufferOne );
glClearColor( 0.2f, 0.3f, 0.1f, 1.0f );
glClear( GL_COLOR_BUFFER_BIT );
bufferShader.use();
float currentFrame = glfwGetTime();
//Set the iTimeDelta uniform.
float deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
bufferShader.setFloat( "iTimeDelta", deltaTime );
// Set the iTime uniform.
float timeValue = currentFrame;
bufferShader.setFloat( "iTime", timeValue );
// Set the iResolution uniform.
bufferShader.setVec2( "iResolution", WIDTH, HEIGHT );
// Input iMouse.
double xPos, yPos;
glfwGetCursorPos( window, &xPos, &yPos );
yPos = HEIGHT - yPos;
bufferShader.setVec2( "iMouse", xPos, yPos );
glBindVertexArray( VAO );
glBindTexture( GL_TEXTURE_2D, textureColourBufferOne );
glDrawElements( GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0 );
glBindVertexArray( 0 );
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
glDisable( GL_DEPTH_TEST );
glClearColor( 1.0f, 1.0f, 1.0f, 1.0f );
glClear( GL_COLOR_BUFFER_BIT );
ourShader.use();
ourShader.setVec2( "iResolution", WIDTH, HEIGHT );
// Set the iTime uniform.
ourShader.setFloat( "iTime", timeValue );
glBindVertexArray(VAO);
glBindTexture( GL_TEXTURE_2D, textureColourBufferOne );
glDrawElements( GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0 );
glfwSwapBuffers( window );
glfwPollEvents();
frameCount++;
finalTime = time( NULL );
if( finalTime - initialTime > 0 )
{
std::cout << "FPS : " << frameCount / (finalTime - initialTime) << std::endl;
frameCount = 0;
initialTime = finalTime;
}