Android Library Projects on Windows and Mac - java

I'm asking this question on behalf of my team of two Android devs. I use Windows and my partner uses a Macbook. When sharing a project through Git, the classpaths accidentally got messed up. Here are a few observations:
The library projects referenced (working initially) can't be resolved anymore.
When adding through the Projects tab in 'Java Build Path', the libraries can be found.
But the app crashes (due to NoClassDefFoundError), again pointing towards a messy build path structure.
Initially referenced library projects on the Mac used to appear directly in the build path as JARs. Now they do under Android Dependencies, which is weird (the former more).
On the Windows, the above JARs have always been under Dependencies and Referenced Libraries.
I'd like to resolve this issue in a way that we can share the project on Git and work seamlessly in the future. :)

One option is to:
not version .classpath,
version a classpath template
generate the right classpath depending on the current platform where the code is checked out.
That is called a content filter driver, here a smudge script, which will be called automatically (hence the "seamless" aspect) on git checkout, and will generate the actual .classpath (otherwise not versioned and add in the .gitignore)
(image shown in "Customizing Git - Git Attributes", from "Pro Git book")
Note that you can easily remove (without deleting it locally) the .classpath from the repo:
git rm --cached -- .classpath
git add -u .
git commit -m "Delete .classpath"
git push

Related

To commit locally in Intellij, do you install git.exe

I am completely new to Java, Intellij and Eclipse.
Recently, I was assigned to
Set up local Git repository.
Commit to Git repository locally.
Set up a remote Git repository on Github and push it.
In Eclipse, I do the following easily
Set up a Gradle project.
Modify a Library.java file under the directory of src/main/java.
Open Gradle Task and Gradle application thru "show view"
Press run under "application".
Configure Git repository.
So after some Googling, it seems that to start a local repository in Intellij, I have to create Git repository under the "VCS" tab.
However, Intellij said I need git.exe.
So my question is, do I need to download git.exe?
If yes, why doesn't eclipse's gradle project require git.exe?
And, to create a local repository and share it to Github, do I need a gradle project in Intellij?
Eclipes uses JGit, enbaded git, so you can run it without installing a git.
However Intellij haven't a build in git then you have to install it and give Intellij the path for it. (That's why he asked for the path to git.exe).
Go to https://git-scm.com/ and download it.
for github, you just need to config the remotes.
if you got already git ( you already did git init)
then just
git remote add origin https://github.com/*user*/*project-name*.git
and then push.
VCS tab on Intellij means "Version Control System" which gives you options to interact with a VCS tool such as Github, which acts as the repository for your code base. In the "terminal" view on Intellij, you can then use your standard Github commands, so you could use git clone (url from Github) -b (branchname) to pull down your code for the first time. And yes you will need to download git.exe but refer to documentation for full steps.
Intellij and Eclipse are both IDE's, so having used both I would recommend using Intellij but everyone has their own personal preference.
For future usage, here's the basic commands to push to GH as you require:
git status (to check the files you've changed)
git add * (to add all files amended) or git add (filepath)
git commit -m "Message to commit"
git push origin (branchname)
First thing first.
Git is a version control system for tracking changes in computer files and coordinating work on those files among multiple people.
Read more in what is git?
When you understand it, it is obvious that you need to install git locally on the computer.
IntelliJ
Intellij has a plugin helps you working with git.
If you read carefully here, you'll see that you need to download and install git before using the IntelliJ plugin.
Eclipse
Eclipse on the other hand uses JGit, a pure java library implementing git version control system.
The Eclipse Git plugin that is called EGit, is using JGit. Which means that you do not actually need to install git in this case.
Since you are completely new with Java, IntelliJ and Eclipse let my give you a good rule of thumb.
If you are working with java and git it is recommended that they will be installed in your computer properly.
IntelliJ and Eclipse are just IDEs with them you can work on your project.
In a properly configured project, you can work either with IntelliJ or Eclipse. It doesn't really matter.
You should not be dependent on any of these IDEs.

After adding Maven framework support in IntelliJ, it moved all /src/com/... files into /src/main/java/com/... without updating git history. How fix?

I added Maven support to a project that previously did not have it. IntelliJ then moved all the java files, but even though it's a git project, did not use git mv and so there's no file history.
How do I fix this?
Example:
//The below structure was before Maven
/src
.../com
.../test
.../SomeClass.java
//After Maven
/src
.../main
.../java
.../com
.../test
.../SomeClass.java
Renames are not first class citizens in Git.
Git detects renames based on file content changes.
As such, the main purpose of git mv is to simplify staging.
If files get renamed without git mv,
that causes only a minor inconvenience,
which you can rectify by appropriate git add commands.
That is, for each renamed file, one git add for the old name ("deleted file" from the perspective of Git), and one git add for the new name ("new file" from the perspective of Git).
In your particular example,
a simple fix could be staging everything by running git add . at the project root.
After that, check the output of git status -sb.
There's a good chance that Git will figure out all the renames.

jar libraries not updated in eclipse with git

I am developing java projects in eclipse and version controlling with git.
What I found today was that the jars of user library was not being updated after pulling a project from git server to another repository/directory. The newly exported jars after adding new classes or functions were not recognized.
So I removed the user library with the problematic jars. The eclipse java project still has access to the jars.
Create a dir.
Git init
Create an empty java project
Pull from git server
The above is the steps that caused this problem. I didnt commit the empty project before pulling.
Thanks~
Have you tried refreshing the project? (Right click on your project and then select Refresh)
Your changes done to the file system (pulling stuff from git) are not known to to Eclipse, so you have to explicitly tell Eclipse that it has to refresh its idea of what are on the file system.

Eclipse setup for git project

There are quite a few questions on this topic, but there are no satisfactory answers unitl now, e.g this.
I'm using Eclipse Kepler (20130529-2219), with ME2 (1.4.0.20130601-0317) and Eclipse Git Team Provider (Java implementation of GIT 3.0.0.201306040240-rc3). So I started with great expectations after reading how great git is.
Firstly, I opened an existing project and removed all the .svn rubbish and commited it to a local git repository. Perfect - now it is time to push the files to a remote repository. After having some problems creating the known_hosts file on Windows the push was successful.
Now the problems started: I wanted to pull changes for the repository, but "... not configured for pull". OK, here it was discussed that this is a common issue, and you have to delete the project and then reimport it from a remote server to allow pulling.
Hence, I set up everything again and pulled the project. Until now I was always told that .project files should not be commit to version control, therefore I didn't include them. The "import -> import from git -> local"-menu does not recognize the files in the repo as a Java project. I can therefore only import the project as a general project or use the project wizzard and set up a new Maven project, which is stupid because all information already exists in the POM.xml. If I do a plain project import, Eclipse does not know that it is a Java or Maven project and throws tonnes of errors.
Question (skip detailed problem): Is there some less awkward way to import a Maven and Java project from a remote git repo when no .project file exists?
Easiest solution: do include the .project (as in this answer) in your git repo.
And do include also the .classpath, since you now can reference relative paths in it, instead of absolute path: see ".classpath and .project - check into version control or not?"
I found an alternative to keep .project file out of Git version control. As you said the pom.xml file should be enough for IDEs to figure out that a maven project it´s in place (and it is).
Let's say you have pushed your project into Git (without .project file) and now you want to import that project into Eclipse.
Make sure you have the Git repo added into Git perspective
Go to J2EE Perspective and double click on an empty space on Navigation View. Import -> Existing Maven Projects
Browse to your Git repo location and voila! Eclipse should catch all pom.xml files and determinate they are independent Maven projects
In my case this worked to pull multiple projects located at one same Git repo, each of them only storing pom.xml file (and no .project at all)

How to correctly version control (svn:ignore) a Java project (Maven, Spring)?

i was on a 2-day training introducing as to Java EE. We used there Java EE, Spring Framework, Maven, Springsource Tool Suite (Eclipse), Tomcat.
I took the Eclipse workspace we created there and run it on my work PC. I had, if i remember correctly, only to configure Tomcat properly, and it worked on my PC.
Now i want to save the created Eclipse workspace containing 5 "sub"-projects in subversion so that my work colleagues can checkout this to them and run it on their computers.
How to do this correctly? I found somewhere a svn:ignore rule:
.classpath
.project
.settings
target
Using tortoiseSVN i added to the folder with the workspace this ignore rule, but the found out that the underlying folders target were'nt deleted so i deleted them manually and "added to ignore list". But after that the project in spring source tool suite does not see the mevan dependencies (i think so) because the imports are broken. STS underlines org. in the imports and says it can not resolve this.
How do i correctly version control such a project?
In my project we are using Maven and Eclipse (Helios, currently) and the Maven plugins for Eclipse:
Maven Integration for Eclipse
Maven Integration for WTP
We only have the pom.xml file and the src/ directory tree in our version control system. We make sure not to add the eclipse files there. Then when a new developer starts in the project they do Import -> Maven -> Existing Maven Projects. The Maven plugins for Eclipse then set up perfect build paths, settings and so on.
This way it is also very easy to re-import your projects into Eclipse as needed.
So, my tip is to leave the Eclipse files out of SVN and make sure you can setup the project correctly automatically simply by importing a Maven project.
If I understand your problem the right way, you need to configure Eclipse in order to be able to launch tomcat from it. The key, here, is not maven anymore, but Eclipse, I think. As you've made modifications in your workspace that can't be put in your maven configuration file (the pom.xml), you become "Eclipse dependant".
The key here is that, as you're Eclipse dependant, you need the Eclipse configuration files to work. Consequently, I'm afraid you need to add back .classpath, .project, .settings to your versioning tool... It's not generic, because you force people who work on your project to use Eclipse. But if everybody in your team do so, it shouldn't be a problem.
As I don't use Eclipse anymore, I don't know if versioning theses files can lead to problems. However, I hope this answer will help you to configure your project back...
EDIT : to be more accurate... and maybe give a better answer.
When using a version control system, the main goal is often (always ?) to give all the keys to use the sources, and develop from them. Consequently, you need to put in your VCS your sources, and all the configurations needed to use them efficiently.
In your specific case, the key is that you've become Eclipse dependant through its Springsource Tool Suite plugin. Consequently, it becomes essential to add the configuration files for this tool, because they can't work without them, and if they can't work, you can't work.
I can tell you my way of subversioning maven eclipse projects. First, when you create the project structure you have to commit the .setting, .classpath, .project files into the subversion repository. If you can't do this the other colleagues will can not use the project structure after checkout. After you commit the project structure, the best way is not to commit these files except only when you change something important eclipse or build path settings, because the others will have conflicts due to the system dependent informations. Never commit the maven target directory. Sorry for my english. Hope it helps.

Categories