Let's clear up some of the confusion.
The Appium Java client jar is not Appium itself. As it's name suggests, it is simply a convenience library for your Java code to interact with an Appium server. The Java client is unable to perform any device automation on its own.
The Appium server is the main component in the automation setup. The server is a Node.js application. All Appium client libraries (Ruby, Python, Java, Javascript, etc.) talk to this server to set up and manage automation sessions because the server is the main component that sends out automation commands to the devices.
Note that the Selenium standalone library does not appear anywhere in this structure for a basic setup. You do not need the Selenium standalone jar to automate on devices.
I recommend reading about the following topics to help clear up some confusion related to writing automation tests in Java:
- Java classpath
- HTTP and REST - The Selenium automation API is built to be a REST API, which is why Appium can completely replace Selenium when it comes to device automation (it's also why Appium can be registered as a Selenium Grid node when you're setting up a distributed automation network)
The following stuff is not strictly Appium-related information.
If you write your tests in Java, you need to place the Appium Java client library in the classpath of your tests. For standard Eclipse Java projects, the classpath usually includes the project's lib/ directory, but classpaths for various projects are customized in various ways. The classpath is simply a list of places for typical class loaders running within a Java Virtual Machine (the JVM) to look for .class files and Java libraries (packaged as .jar files).
In the Java world, there are thousands upon thousands of libraries for different tasks. Many of these libraries will depend on each other, so if you choose to use one particular library, you will likely have to download another library - this other library is called a dependency. Dependencies can have their own dependencies, so you can end up having a so-called dependency chain. This is a nightmare to manage manually, so most Java programmers would recommend you to use Maven or Gradle as your project's build tools to manage these dependencies. Ant (with the Ivy extension) is also able to manage these dependencies, but Ant is pure configuration while Maven and Gradle offer "convention over configuration" defaults. Note that the Appium Java client itself has its own dependency chain, so it's not practical to simply download the Appium jar and plop it right inside your classpath.