Reputation: 1506
I have a project structure like this:
src
|-main
|-java
|-com.abc.xyz
|-Login.java
I have to add a resource file to this and read the resource with
InputStream is = getClass().getResourceAsStream("launchers.properties");
This is giving null.
In Intellij I am not able to add a new package under src/main
for resources
folder so
that the project structure looks like this. How can I load the launchers.properties
resource file into the project?
src
|-main
|-java
|-com.abc.xyz
|-Login.java
|-resources
|-com.abc.xyz
|-Login
|-launcher.properties
I tried the solution suggested by @maba but still not working
Upvotes: 48
Views: 121506
Reputation: 153
Only solution worked for me:
File -> Project Structure -> Modules -> Dependencies Tab -> + Sign -> JARs or directories -> select resources directory -> Classes
Upvotes: 0
Reputation: 3089
Follow these two steps
1) Create a directory
Right Click ==> New ==> Directory
2) Mark Directory as Resources Root
Right Click on the Direcory ==> Mark Directory as ==> Resources Root
Upvotes: 3
Reputation: 85
from menu Run/edit configuration in VM option you should add -Dspring.config.location=path-file
I've tried it in IntelliJ, and it works!
Upvotes: 0
Reputation: 1522
I had the same problem and noticed that the resource file, for example: my.properties
is not copied to the corresponding module folder in the target
directory after build occurres. In order to solve that, I had to instruct Maven to copy the resources from the module directory to the target
directory during the build process. In the .pom
file I added <resource>
element like that:
<project ...>
...
<build>
...
<resource>
<directory>src/main/java/com/abc/xyz</directory>
<targetPath>com/abc/xyz</targetPath>
</resource>
</build>
...
</project>
Note that the <directory>
element is relative to the location of the .pom
file , i.e. the root directory of the project, and the <targetPath>
element indicates the package name separated by slashes.
Upvotes: 0
Reputation: 12728
No..... the structure is wrong.... you should not create the same package under resources
, that is ugly and not proper: resources
is for resources, and should not contain source packages.
When using ClassLoader.getResources(asStream)(path)
method, the method just starts searching from the root of the classpath and the path name cannot start with /
as leading characters. What you have to do, is to mark the resources
as resources folder
in IntelliJ. Then the files under resources
will be listed under classpath and you can easily use them like you have done.
(I see in previous answers this option is not available yet in 2013, you only have mark as source folder
, just like in Eclipse till now we have "add source folder", but now in 2018 it is available in Intellij: you can mark a folder as source, resources, test source, test resources, and all of them will be add to the root of classpath. )
Upvotes: 0
Reputation: 835
As @maba pointed out, your properties file should be in the same package as your class for your code to work.
So, you should have two files:
If IntelliJ is showing the resource or not is beside the question. What you need to do is check if the results are included in your target artefact.
Do a build all
in IntelliJ, open up the resulting WAR/JAR/EAR with your favorite ZIP viewer and browse into the "com/abc/xyz" folder. You should see both files there.
Upvotes: 4
Reputation: 48065
The launcher.properties
should not be under a folder called Login
. It should be placed directly in the src/main/resources/com/abc/xyz
folder.
It is really as simple as I said but if the resources folder is not marked as a sources folder then this may be the problem.
This is the initial class and setup:
Now create the resources folder:
This newly created folder should be automatically marked as a sources folder and if it is blue color marked then it is. Otherwise you'll have to mark it manually:
Now you'll be able to add packages to it:
And now you can add the file to it:
And rerunning the application will not give you any null
value back:
And the package view will surely show the launchers.properties
file as well:
Upvotes: 76