For this Netbeans project:
.
├── build.xml
├── manifest.mf
├── nbproject
│ ├── build-impl.xml
│ ├── genfiles.properties
│ ├── groovy-build.xml
│ ├── private
│ │ └── private.properties
│ ├── project.properties
│ └── project.xml
└── src
├── Config1.groovy
└── net
└── bounceme
└── mordor
└── groovy
└── file_ops
└── NewGroovyScript.groovy
8 directories, 10 files
what would the standard location, or path, for foo.properties so that it can be easily picked up? in src?
You should be able to stick it in the same folder as your NewGroovyScript.groovy class file, then just do:
Properties p = NewGroovyScript.class.getResource('foo.properties').withInputStream { s ->
Properties properties = new Properties()
properties.load(s)
properties
}
Related
I'm using a Twitter engineered build tool pants to manage many projects inside my monorepo. It outputs .pex files when I complete a build, this is a binary that packages the bare minimum dependencies I need for each project and makes them a "binary" (actually an archive that's decompressed at runtime), my issue is a utility that my code has used for a long time fails to detect some .json files(now that I'm using pants) I have stored under my environments library. all my other code seems to run fine. I'm pretty sure it has to do with my config, perhaps I'm not storing the resources properly so my code can find it, though when I use unzip my_app.pex the resources I desire are in the package and located in the proper location(dir). Here is the method my utility uses to load the json resources:
if test_env:
file_name = "test_env.json"
elif os.environ["ENVIRONMENT_TYPE"] == "PROD":
file_name = "prod_env.json"
else:
file_name = "dev_env.json"
try:
json_file = importlib.resources.read_text("my_apps.environments", file_name)
except FileNotFoundError:
logger.error(f"my_apps.environments->{file_name} was not found")
exit()
config = json.loads(json_file)
here is the the BUILD file I use for these resource currently:
python_library(
dependencies=[
":dev_env",
":prod_env",
":test_env"
]
)
resources(
name="dev_env",
sources=["dev_env.json"]
)
resources(
name="prod_env",
sources=["prod_env.json"]
)
resources(
name="test_env",
sources=["test_env.json"]
)
and here is the BUILD file for the utility that calls these resources of which the python code above is what you saw:
python_library(
name="environment_handler",
sources=["environment_handler.py"],
dependencies=[
"my_apps/environments:dev_env",
"my_apps/environments:prod_env",
"my_apps/environments:test_env"
]
)
I always get an FileNotFoundError exception and I'm confused because the files are available to the runtime, what's causing these files to not be accessible? and is there a different format I need to set up the JSON resources as?
Also for context here is the decompressed .pex file(actually just the source-code dir):
├── apps
│ ├── __init__.py
│ └── services
│ ├── charts
│ │ ├── crud
│ │ │ ├── __init__.py
│ │ │ └── patch.py
│ │ ├── __init__.py
│ │ └── main.py
│ └── __init__.py
├── environments
│ ├── dev_env.json
│ ├── prod_env.json
│ └── test_env.json
├── __init__.py
├── models
│ ├── charts
│ │ ├── base.py
│ │ └── __init__.py
│ └── __init__.py
└── utils
├── api_queries
│ ├── common
│ │ ├── connections.py
│ │ └── __init__.py
│ └── __init__.py
├── calculations
│ ├── common
│ │ ├── __init__.py
│ │ └── merged_user_management.py
│ └── __init__.py
├── environment_handler.py
├── __init__.py
├── json_response_toolset.py
└── security_toolset.py
I figured it out: I changed the way I access the files within the library and it works perfectly before and after the build to .pex format. I used:
import pkgutil
#json_file = importlib.resources.read_text("my_apps.environments", file_name)
json_file = pkgutil.get_data("my_apps.environments", file_name).decode("utf-8")
I was asking on #arquillian Freenode IRC channel about question
Arquillian JPA tutorial: Could not create new instance of class org.jboss.arquillian.test.impl.EventTestRunnerAdaptor
when a user told me that he successfully runned
https://github.com/arquillian/arquillian-examples/tree/master/arquillian-persistence-tutorial
so I did
git clone https://github.com/arquillian/arquillian-examples.git
then in Eclipse, I clicked File->Import->Existing Maven Projects and selecte the subdirectory
arquillian-examples/arquillian-persistence-tutorial
Once Eclipse finished importing the project, I obtain in file
/src/test/java/org/arquillian/example/GamePersistenceTest.java
line 146, the error message
Game_ cannot be resolved to a variable
What can I do? In my attempt at the link at beginning of the page, this did not happpen.
I did not change any file downloaded from git repo.
Folder tree
.
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ └── arquillian
│ │ │ └── example
│ │ │ └── Game.java
│ │ └── resources
│ │ └── META-INF
│ │ └── persistence.xml
│ └── test
│ ├── java
│ │ └── org
│ │ └── arquillian
│ │ └── example
│ │ └── GamePersistenceTest.java
│ ├── resources
│ │ ├── arquillian.launch
│ │ ├── arquillian.xml
│ │ └── jbossas-ds.xml
│ ├── resources-glassfish-embedded
│ │ ├── glassfish-resources.xml
│ │ ├── logging.properties
│ │ └── test-persistence.xml
│ ├── resources-glassfish-remote
│ │ └── test-persistence.xml
│ └── resources-jbossas-managed
│ └── test-persistence.xml
└── target
├── classes
│ ├── META-INF
│ │ ├── MANIFEST.MF
│ │ ├── maven
│ │ │ └── org.arquillian.example
│ │ │ └── arquillian-persistence-tutorial
│ │ │ ├── pom.properties
│ │ │ └── pom.xml
│ │ └── persistence.xml
│ └── org
│ └── arquillian
│ └── example
│ └── Game.class
└── test-classes
├── arquillian.launch
├── arquillian.xml
├── glassfish-resources.xml
├── jbossas-ds.xml
├── logging.properties
├── org
│ └── arquillian
│ └── example
│ └── GamePersistenceTest.class
└── test-persistence.xml
30 directories, 24 files
The _Game class in that example is generated by the Hibernate JPA 2 metamodel generator (hibernate-jpamodelgen) that is defined as a dependency in the project POM. You'll now need to generate the metamodel by employing one the options outlined in the metamodel generator reference guide.
You could use Eclipse itself by configuring the annotation processing phase. Or you could modify the POM to use the maven-compiler-plugin configuration specified in the guide, to run as part of your build.
I'm creating a new Spring MVC webapp.
I used STS 3.0 Dashboard -> Spring Template Project -> Spring MVC Project (URL:http://dist.springsource.com/release/STS/help/org.springframework.templates.mvc-3.1.2.zip) to create the project. It created a directory structure like this:
build/
classes/
src/
main/
java/
com/
example/
web/
HomeController.java
resources/
META-INF/
log4j.xml
webapp/
resources/
WEB-INF/
classes/
spring/
appServlet/
servlet-context.xml
root-context.xml
views/
home.jsp
web.xml
test/ ***(I'll leave out what's under test)***
target/
classes/ ***(I'll leave out what's under classes)***
test-classes/ ***(I'll leave out what's under testclasses)***
WebContent/
META-INF/
MANIFEST.MF
WEB-INF/
lib/
This does not match any directory layout I can find documentation for and it certainly looks wrong. Like why is there a WebContent/WEB-INF as well as a src/webapp/WEB-INF? Why both a build/ and a target/ ?
I want to be able to build and deploy automatically from Eclipse Juno as well as from the command line using Maven, so question 1 is: how do I clean up this directory structure?
Question 2: what is the difference between src/main/resources/ and src/main/webapp/resources? How do I choose which directory to put a given static resource in?
Question 3: If I have libraries that I need to include that I cannot have Maven get, where do I put them?
I tied it in my local and following is the folder structure:
.
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── test
│ │ │ └── spring
│ │ │ └── HomeController.java
│ │ ├── resources
│ │ │ ├── log4j.xml
│ │ │ └── META-INF
│ │ └── webapp
│ │ ├── resources
│ │ └── WEB-INF
│ │ ├── classes
│ │ ├── spring
│ │ │ ├── appServlet
│ │ │ │ └── servlet-context.xml
│ │ │ └── root-context.xml
│ │ ├── views
│ │ │ └── home.jsp
│ │ └── web.xml
│ └── test
│ ├── java
│ │ └── com
│ │ └── test
│ │ └── spring
│ └── resources
│ └── log4j.xml
└── target
├── classes
│ ├── com
│ │ └── test
│ │ └── spring
│ │ └── HomeController.class
│ └── log4j.xml
├── m2e-wtp
│ └── web-resources
│ └── META-INF
│ ├── MANIFEST.MF
│ └── maven
│ └── com.exigen
│ └── spring
│ ├── pom.properties
│ └── pom.xml
└── test-classes
├── com
│ └── test
│ └── spring
└── log4j.xml
(I removed the .XXX files/folder which just the metadata for eclipse)
Basically, for you question:
Typical src/webapp/WEB-INF is the maven way and WebContent/WEB-INF is the WTP way. And the maven way is suggested.
Also build/ is generate by eclipse and target/ is the maven way, you can just ignore this.
for Question2, src/mian/resources is the maven way which will be compiled to the target/classes folder. and 'src/main/webapp/resources' is used for some static resources.
for Question3, actually all the 3rd-party libraries are house in the WEB-INF/lib after package, so you can put your libraries into this folder, no matter using maven or not.
I have finally made a production worthy app with play, and use the play war -o foo command to create an exploded war. However, its size goes on to 30 MB and there are a lot of folders included. I develop in eclipse, so there are some eclipse folders too. Below is a list of the folders I have. Can anyone help me out with the unnecessary folders? I have zeroed in on the app, conf, public and lib folders. Is my assumption correct?
├── app
│ ├── controllers
│ ├── jobs
│ │ ├── daily
│ │ └── monthly
│ ├── models
│ │ ├── encrypt
│ │ ├── file
│ │ ├── login
│ │ └── mail
│ ├── playground
│ └── views
│ ├── Application
│ └── errors
├── conf
├── eclipse
│ └── classes
│ ├── controllers
│ ├── jobs
│ │ ├── daily
│ │ └── monthly
│ ├── models
│ │ ├── encrypt
│ │ ├── file
│ │ ├── login
│ │ └── mail
│ └── playground
├── lib
├── logs
├── public
│ ├── bootstrap
│ │ ├── css
│ │ ├── img
│ │ ├── js
│ │ │ └── tests
│ │ │ ├── unit
│ │ │ └── vendor
│ │ └── less
│ ├── images
│ ├── javascripts
│ └── stylesheets
├── test
└── tmp
├── bytecode
│ └── DEV
└── classes
├── controllers
├── helpers
├── jobs
│ ├── daily
│ └── monthly
├── models
│ ├── encrypt
│ ├── file
│ ├── login
│ └── mail
└── playground
You need to delete your tmp folder as well, try to use play clean on your project.
All folders in app, conf, lib and public should be kept in your war. Maybe should add precompiled
Where is the lib folder with the JAR's? Is there some magic to load the JAR's from another directory?
Specifically, where is beansbinding-1.2.1.jar and the other jar is swing-layout-1.0.4.jar?
image
directory structure:
thufir#dur:~/NetBeansProjects$
thufir#dur:~/NetBeansProjects$
thufir#dur:~/NetBeansProjects$ tree fud/
fud/
├── build.xml
├── manifest.mf
├── nbproject
│ ├── build-impl.xml
│ ├── genfiles.properties
│ ├── private
│ │ ├── private.properties
│ │ └── private.xml
│ ├── project.properties
│ └── project.xml
└── src
└── dur
└── bounceme
└── net
└── view
├── NewJFrame.form
└── NewJFrame.java
7 directories, 10 files
thufir#dur:~/NetBeansProjects$
thufir#dur:~/NetBeansProjects$ head fud/build.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="fud" default="default" basedir=".">
thufir#dur:~/NetBeansProjects$
you have an option of add Jar/Folder just below Add Library . Use that
Just for reference, I got the following structure:
thufir#dur:~/NetBeansProjects$
thufir#dur:~/NetBeansProjects$ tree fud/
fud/
├── build.xml
├── lib
│ ├── beans-binding
│ │ ├── beansbinding-1.2.1-doc.zip
│ │ └── beansbinding-1.2.1.jar
│ ├── CopyLibs
│ │ └── org-netbeans-modules-java-j2seproject-copylibstask.jar
│ ├── nblibraries.properties
│ └── swing-layout
│ ├── swing-layout-1.0.4-doc.zip
│ ├── swing-layout-1.0.4.jar
│ └── swing-layout-1.0.4-src.zip
├── manifest.mf
├── nbproject
│ ├── build-impl.xml
│ ├── genfiles.properties
│ ├── private
│ │ ├── config.properties
│ │ ├── private.properties
│ │ └── private.xml
│ ├── project.properties
│ └── project.xml
└── src
└── dur
└── bounceme
└── net
└── view
├── NewJFrame.form
└── NewJFrame.java
11 directories, 18 files
thufir#dur:~/NetBeansProjects$
by clicking on the project properties as so:
but don't understand where this JAR's were before.