How do I attach Javadocs for a Gradle dependency in Eclipse? - eclipse

My Gradle project is pulling in some jar dependencies from file like this:
dependencies {
compile fileTree(dir: 'lib', include: '*.jar')
}
I have downloaded the Javadocs for one of the dependencies as a zip file, how do I add the Javadocs in Eclipse?
When I right click on the Gradle dependency and try to add Javadocs I see this:
The current class path entry belongs to container 'Gradle Dependencies (persisted)' which does not allow user modifications to Javadoc locations on its entries.

It may be a bit complicated for a file jar. But if you are able to get the dependency from repo, then this is the way to go:
repositories {
mavenCentral()
}
dependencies {
compile 'javax.servlet:javax.servlet-api:3.1.0'
}
eclipse.classpath.downloadJavadoc = true
eclipse.classpath.downloadSources = false
After I do gradle cleanEclipse eclipse I get something like that in .classpath:
<classpathentry kind="lib" path="C:/.../javax.servlet-api-3.1.0.jar">
<attributes>
<attribute name="javadoc_location" value="jar:file:/C:/.../javax.servlet-api-3.1.0-javadoc.jar!/"/>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>

You have to add the javadoc zip via eclipse closure. It could be achieved using the following code by
eclipse {
classpath {
file {
whenMerged { cp ->
// Add sources to a classpath entry
def fileReferenceFactory = new org.gradle.plugins.ide.eclipse.model.internal.FileReferenceFactory()
def entry = cp.entries.find{ entry -> entry.path.endsWith('$YOUR_JAR.jar') }
// add javadoc jar
entry.javadocPath = fileReferenceFactory.fromPath(file('$JAVADOC_FOLDER/$JAVADOC_FILE.zip'))
}
}
}
}
Btw. I would suggest to add the a *-sources.jar as this also makes the javadoc hints available if it is possible. This can be done using the above code and
// add sources jar
entry.sourcePath = fileReferenceFactory.fromPath(file('$SOURCES_FOLDER/$SOURCE_FILE.jar')
instead of entry.javadocPath.

Related

Eclipse buildship not configuring classpath from gradle - worked and then broke

I have a gradle based eclipse workspace which has a parent project and multiple child projects. Eclipse suddenly has problems adding a project to the classpath of another though it works fine from gradle command line.
Eclipse is showing a typical error for a package it can't find:
PROJECTS
CmbProduct
+-- build.gradle
+-- settings.gradle
+--+ MangoCommon
+-- build.gradle
+-- src/main/java/org/mangogrove/common/util/StringTool.java
+--+ Model
+-- build.gradle
+--+ Common
+-- build.gradle
+-- src/main/java/mypackage/AbstractExpander.java
View of Projects:
If I open AbstractExpander.java in eclipse it shows the import of StringTool as an error and underlins the "mango" package as the error. (See first pic).
WHAT I HAVE TRIED
Classes in Model that import classes from MangoCommon are fine.
Running "gradle compileJava" from command line works fine.
There are no errors in .metadata/.log
If I delete .metadata and rebuild/re-import the problem returns.
A similar setup on the same system for a different dev branch of the same product works fine.
I've done a restore of the dev tree from backups from last week when it worked fine. Problem returns as soon as I Gradle -> Sync in eclipse.
I removed .metadata and all .project .classpath .settings from each project (including parent) and imported via Gradle > Import Existing Gradle Project
EDIT 20221121
I tried eclipse 2021-12 before running I removed all .metadata .project .classpath .settings from each project (including parent) and imported via Gradle > Import Existing Gradle Project.
EDIT 20221122
Created a completely new workspace dir, git imported, then ran Eclipse and did Import > Gradle Existing Project. Same problem.
I restored the VM holding the broken workspace from a week before the VM rebooted. Eclipse fires up fine on the broken workspace. However after I run Gradle > Refresh Gradle Project it becomes broken in the same way.
I installed eclipse 2022-06 (4.20) and wiped my .metadata .settings .classpath .project files. After Gradle Import Existing Project the problem appears right away.
FINDINGS
In eclipse if I expand Common -> Project and External Dependencies the "MangoCommon" entry is greyed out but "Model" is normal.
My actual product has many other sub-projects most of which are like "Common" and are showing errors when importing classes from MangoCommon.
CmbProject build.gradle
buildscript {
// Always load buildinfo so project.version is set as early as possible
gradle.startParameter.taskNames = [":buildInfoLoad"] + gradle.startParameter.taskNames
// Repos needed just for the dependencies section directly below
repositories {
flatDir {
dirs 'MangoGroveGradle/repoflat'
}
maven { // aka "jcenter()"
url "https://jcenter.bintray.com"
}
}
dependencies {
classpath("org.mangogrove.gradle:MangoGroveGradle:1.0.0")
}
}
apply plugin: 'org.mangogrove.gradle'
import org.apache.tools.ant.filters.*;
allprojects {
ext {
... snip ...
generatedSrcDir = "src-gen
}
wrapper {
distributionType = Wrapper.DistributionType.BIN
}
subprojects {
/*
* Use "apply plugin" not "plugins" because the former allows each
* sub-project to add their own without overriding what is set here.
*/
apply plugin: 'java'
/*
* We use "testFixturesApi" and similar here so we must have this plugin
*/
apply plugin: 'java-test-fixtures'
// Every subproject should be configured for Eclipse
apply plugin: 'eclipse'
/*
* Some files contain non-ASCII chars like Euro symbol. We need to tell
* Java to use UTF-8 always
*/
compileJava {options.encoding = "UTF-8"}
targetCompatibility = JavaVersion.VERSION_1_8
sourceCompatibility = JavaVersion.VERSION_1_8
javadoc.enabled = false
sourceSets {
main {
java {
// Define all source dirs - Purpose is to add "src-gen"
srcDirs = ["src/main/java", "$rootProject.generatedSrcDir" ]
}
}
}
/*
* Tell Gradle to treat src-gen like a resource so it will copy <model>.ecore files here
* and set classpath properly at runtime.
*/
sourceSets.main.resources.srcDir "$rootProject.generatedSrcDir"
repositories {
maven {
// Local repo for annovention
url uri("$rootDir/MangoCommon/repo")
}
maven {
url uri("$rootDir/logbackwela/repo")
}
mavenCentral()
maven { url "https://maven.java.net/content/groups/public" }
// Texo/EMF
maven { url "https://oss.sonatype.org/content/groups/public" }
// Eclipse
maven { url "https://oss.sonatype.org/content/repositories/public/eclipse" }
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
maven { url 'https://mvnrepository.com/artifact' }
maven { url "https://repository.jboss.org/nexus/content/groups/public-jboss" }
maven { url "https://maven.vaadin.com/vaadin-addons" }
maven { url "https://oss.sonatype.org/content/repositories/vaadin-snapshots" }
maven { url "https://maven.clapper.org" }
// Project Lombok
maven { url "https://projectlombok.org/mavenrepo" }
}
def bouncycastleVersion = "1.69" // Was 1.68
def lombokVersion = "1.18.20" // was 1.18.10
.... snip ...
ext {
springFrameworkVersion = "5.3.6" // 5.3.4
springDataVersion = "2.4.8" // 2.4.3
... snip ...
}
configurations.all {
// We use logback now but some dependencies pull in slf4j-jdk14 so we exclude here
exclude group:"org.slf4j", module: "slf4j-jdk14"
}
dependencies {
/*
* PRODUCT SPECIFIC
*/
implementation "org.bouncycastle:bcprov-jdk15on:$bouncycastleVersion"
implementation "org.bouncycastle:bcpkix-jdk15on:$bouncycastleVersion"
testFixturesApi "org.bouncycastle:bcprov-jdk15on:$bouncycastleVersion"
testFixturesApi "org.bouncycastle:bcpkix-jdk15on:$bouncycastleVersion"
/*
* Common and product
*/
implementation "org.simpleframework:simple-xml:$simpleXmlVersion"
/*
* We use logback for logging but need various slf4j packages to route other
* logger frameworks to slf4j which is handled by logback
*/
implementation "ch.qos.logback:logback-classic:$logbackVersion"
implementation "org.slf4j:slf4j-api:$slf4jVersion"
// Janino required by our logback configs
implementation "org.codehaus.janino:janino:$janinoVersion"
// Route JCL -> slf4j which forwards to logback
implementation "org.slf4j:jcl-over-slf4j:$slf4jVersion"
// Route JUL -> slf4j which forwards to logback
// This is required for c3p0 to use slf4j -> logback
implementation "org.slf4j:jul-to-slf4j:$slf4jVersion"
// Route log4j -> slf4j which forwards to logback
implementation "org.slf4j:log4j-over-slf4j:$slf4jVersion"
// Send slf4j to log4j 1.2 for those JARs which use slf4j
//implementation "org.slf4j:slf4j-log4j12:$slf4jVersion"
// Log4j itself
//implementation "log4j:log4j:$log4jVersion"
// Texo (use changing: true to enable snapshots)
implementation group: "org.eclipse.emf", name: "org.eclipse.emf.texo", version: "$texoVersion", changing: true
implementation group: "org.eclipse.emf", name: "org.eclipse.emf.texo.server", version: "$texoVersion", changing: true
implementation group: "org.eclipse.emf", name: "org.eclipse.emf.texo.xml", version: "$texoVersion", changing: true
// Texo dependencies (not automaticly added by texo)
implementation "org.eclipse.emf:org.eclipse.emf.common:$emfVersion"
implementation "org.eclipse.emf:org.eclipse.emf.ecore:$emfVersion"
implementation "org.eclipse.emf:org.eclipse.emf.ecore.xmi:$emfVersion"
implementation "org.jsoup:jsoup:$jsoupVersion"
// Apache HTTP client
implementation("org.apache.httpcomponents:httpclient:$apacheHttpClientVersion") {
// This is an older implementation deprecated by jcl-over-slf4j
exclude group: "commons-logging"
}
// EventBus and more
implementation "com.google.guava:guava:$googleGuavaVersion"
testFixturesApi "com.google.guava:guava:$googleGuavaVersion"
implementation("com.sun.mail:javax.mail:$javaxMailVersion") { // Actual implementation
// This dependency includes an older version
exclude group: "javax.activation"
}
// Make sure we use the same version for everything
implementation "jakarta.annotation:jakarta.annotation-api:1.3.5"
implementation "net.java.dev.jna:jna:$jnaVersion"
implementation "net.java.dev.jna:jna-platform:$jnaVersion"
// This package provided by Tomcat or Servlet container
compileOnly "javax.servlet:javax.servlet-api:$javaxServletVersion"
testFixturesApi "javax.servlet:javax.servlet-api:$javaxServletVersion"
annotationProcessor "org.projectlombok:lombok:$lombokVersion"
compileOnly "org.projectlombok:lombok:$lombokVersion"
testFixturesApi "org.projectlombok:lombok:$lombokVersion"
testFixturesAnnotationProcessor "org.projectlombok:lombok:$lombokVersion"
testImplementation "org.projectlombok:lombok:$lombokVersion"
testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion"
testImplementation "org.testng:testng:$testngVersion"
}
}
CmbProject settings.gradle
include 'CodeGen'
include 'MangoCommon'
include 'Model'
include 'Common'
Common build.gradle
plugins {
id 'java-library'
}
// Enable deprecation messages in javac
compileJava {
options.compilerArgs << '-Xlint:deprecation'
}
compileTestJava {
options.compilerArgs << '-Xlint:deprecation'
}
dependencies {
api project(":Model")
// Version does not change
api "javax.xml.soap:javax.xml.soap-api:1.4.0"
testImplementation testFixtures(project(":MangoCommon"))
testFixturesApi project(":MangoCommon")
testFixturesApi testFixtures(project(":MangoCommon"))
// Required for JAX-RS Client
api "org.glassfish.jersey.core:jersey-client:$jerseyGlassfishVersion"
// Required by client + servlet container 2.26 and later [RUNTIME REQUIREMENT]
api "org.glassfish.jersey.inject:jersey-hk2:$jerseyGlassfishVersion"
// Required by Client jersey 2.26 and later [RUNTIME REQUIREMENT]
api "org.glassfish.jersey.media:jersey-media-jaxb:$jerseyGlassfishVersion"
}
... snip out tasks ....
Model build.gradle
plugins {
id 'java-library'
}
compileJava.dependsOn copyEcore
// Enable deprecation messages in javac
compileJava {
options.compilerArgs << '-Xlint:deprecation'
}
dependencies {
api project(":MangoCommon")
// testImplementation testFixtures(project(":MangoCommon"))
api "org.flywaydb:flyway-core:$flywayVersion"
// Provide javax.persistence classes
api "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final"
implementation "org.hibernate:hibernate-core:$hibernateVersion"
}
sourceSets.test.resources.srcDir "src/dev/resources" // for persistconfig.properties
... snip tasks ...
MangoCommon build.gradle
plugins {
id 'java-library'
}
// Enable deprecation messages in javac
compileJava {
options.compilerArgs << '-Xlint:deprecation,unchecked'
}
compileTestJava {
options.compilerArgs << '-Xlint:deprecation,unchecked'
}
compileTestFixturesJava {
options.compilerArgs << '-Xlint:deprecation'
}
dependencies {
testImplementation "org.testng:testng:$testngVersion"
api "com.impetus:annovention:$annoventionVersion"
api("org.clapper:javautil:$clapperJavaUtilVersion") {
// Exclude older asm to avoid implementation issue
exclude group: "asm", module: "asm"
exclude group: "asm", module: "asm-commons"
exclude group: "asm", module: "asm-tree"
// Exclude items provided elsewhere
exclude group: "javax.mail", module: "mail"
exclude group: "commons-logging", module: "commons-logging"
exclude group: "javax.activation"
}
api("org.freemarker:freemarker:$freemarkerVersion") {
exclude group: "freemarker", module: "freemarker" // Legacy org-less group
}
implementation "org.hibernate:hibernate-core:$hibernateVersion"
testFixturesApi "org.hibernate:hibernate-core:$hibernateVersion"
api "org.springframework:spring-core:$springFrameworkVersion"
api "org.springframework:spring-context:$springFrameworkVersion"
api "org.springframework:spring-context-support:$springFrameworkVersion"
api "org.springframework:spring-orm:$springFrameworkVersion"
api "org.springframework:spring-web:$springFrameworkVersion"
api "org.springframework:spring-webmvc:$springFrameworkVersion"
api "org.springframework.data:spring-data-jpa:$springDataVersion"
api "com.zaxxer:HikariCP:$hikariCpVersion"
}
... snip tasks ...
Here is the Common/.classpath that Eclipse -> Gradle sync created:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="bin/main" path="src/main/java">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/main" path="src-gen">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/main" path="src/main/resources">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/test" path="src/test/java">
<attributes>
<attribute name="gradle_scope" value="test"/>
<attribute name="gradle_used_by_scope" value="test"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/test" path="src/test/resources">
<attributes>
<attribute name="gradle_scope" value="test"/>
<attribute name="gradle_used_by_scope" value="test"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/testFixtures" path="src/testFixtures/java">
<attributes>
<attribute name="gradle_scope" value="testFixtures"/>
<attribute name="gradle_used_by_scope" value="testFixtures"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<classpathentry kind="src" path="/Model">
<attributes>
<attribute name="without_test_code" value="false"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="/MangoCommon">
<attributes>
<attribute name="without_test_code" value="false"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="bin/default"/>
</classpath>
Environment
eclipse.buildId=4.25.0.I20220831-1800
java.version=17.0.4.1
java.vendor=Eclipse Adoptium
Gradle: 7.5.1
Buildship: 3.1.6
Found the problem!
Gradle 7.5.x + Buildship 3.1.6 seem to be broken. When I configured Eclipse (Preferences > Gradle > Specific version) to use 7.4.2 everything worked once again.
I normally have Eclipse Gradle configured to use gradle wrapper. I had upgraded gradle wrapper from 7.4.2 to 7.5.1 from the command line a month ago. Gradle worked fine from the command line but once my dev system rebooted I ran Gradle > Refresh Gradle Project which used 7.5.1 for the first time in eclipse.

Why does Gradle->Refresh remove my protobuf source folder from .classpath?

I have an Eclipse/Gradle project that looks like the following. One directory for .proto descriptors and one directory for the generated .java files for inclusion in other projects.
src/main/java
src/main/proto
I want to add my src/main/proto directory as an Eclipse source folder to make editing easier.
So naturally I add <classpathentry kind="src" path="src/main/proto"/> to my .classpath file. The source folder is added and everything is great until I run Gradle->Refresh which unkindly removes the source folder. My guess is that Gradle doesn't find any .java files in the proto folder and therefore removes the entire folder from .classpath. Is there any way to prevent this?
I have also tried:
<classpathentry kind="src" path="src/main/proto">
<attributes>
<attribute name="FROM_GRADLE_MODEL" value="true"/>
</attributes>
</classpathentry>
from this question without success.
so the thing is that gradle will (re)-generate the .classpath file from scratch if you do the refresh. So anything you haven't defined at the gradle level will be lost!
How do you define the src folders in Gradle ?
Try to put the following block into you build.gradle:
sourceSets {
main {
java {
srcDirs 'src/main/proto'
}
}
}
This should add 'src/main/proto' to the eclipse classpath as long as the folder contain at least one file!

Hibernate Mapping files path for gradle and eclipse

I am using gradle builds for our build process and need eclipse for our development environment. Gradle expects the hibernate.cfg and .hbm files in a folder main/resources inside of the src folder. But eclipse expects it directly inside of src folder.
Gradle
- src
- main
- resources
hibernate.cfg
package/path/.hbm files
Eclipse
- src
hiberante.cfg
package/path/.hbm files
To get it working on eclipse I have modified the .cfg file to have mappings with the folder prefixed. But when I do a gradle build, the below hack fails and I get a 'org.hibernate.boot.MappingNotFoundException: Mapping (RESOURCE) not found : main/resources/com/mnox/database/hibernate/pojos/v2/Booking.hbm.xml :`
<mapping resource="main/resources/com/mnox/database/
EDIT 1
I tried the following, did not work for gradle.
To fix the issues I did the folllowing
I moved all the .hbm files from src/main/resources/package/path to src/package/path.
I retained the .cfg file in src/main/resources
In the .cfg file I ensured that the path was package/path/Booking.hbm.xml
Both Gradle and Eclipse now work.
EDIT 2
apply plugin: 'java'
repositories {
jcenter()
}
dependencies {
compile 'org.slf4j:slf4j-api:1.7.21'
testCompile 'junit:junit:4.12'
//compile files('src/com/mnox/database/hibernate/pojos/v2')
}
jar {
baseName='databasepojos'
from ('src/com/mnox/database/hibernate/pojos/v2/*.xml')
// from ('build/classes/main')
}
sourceSets {
main {
java {
srcDir 'src'
//includes = 'src/com/mnox/database/hibernate/pojos/v2/**'
//includes = ["**/*.java"]
}
}
}
allprojects {
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
}
FileTree hbmfilesFrom = fileTree(dir: 'src/com/mnox/database/hibernate/pojos/v2/*.hbm.xml')
task copyHBMXMLFiles(type: Copy) {
from hbmfilesFrom
into 'build/main/resources/com/mnox/database/hibernate/pojos/v2'
}
EDIT 3
My .classpath file
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="build"/>
</classpath>
Assuming that your application and/or tests are referring to hibernate.cfg via the classpath all you need to do is make sure that src/main/resources is a classpath folder in both gradle and eclipse.
In gradle that's simple as this is the default
I'm not sure how you are generating your eclipse project but src should NOT be on the classpath. It should be src/main/resources plus the compiled classes directory.
I advise against manually creating an eclipse project for your gradle project
Do you know there's the buildship eclipse plugin?
Alternatively, do you know that you can generate .classpath and .project using the gradle plugin?

Missing Maven dependencies in Eclipse project

We have a project set up with maven for resolving dependancies. It usually works fine, but now I am trying to compile and run it on a new PC and I have problem with missing dependencies in Eclipse.
What is funny is that if I run "mvn package" in console or in eclipse, it works fine and even produces war containing all necessary jars. Only Eclipse complains with "The project was not built since its build path is incomplete. Cannot find the class file for org.slf4j.Logger...". If I compare the project with some other computer (where project works fine), I notice that there are quite a few libraries missing under "Maven dependencies" listing in Eclipse. Eventhough they are in the packaged war and they can be found also under repository folder.
So, the jar-s are there just Eclipse won't list them all under "Maven dependencies". What can I do?
Computer is running on Windows 7 with 64bit java & eclipse.
Well, I tried everything posted here, unfortunately nothings works in my case. So, trying different combinations I came out with this one that solved my problem.
1) Open the .classpath file at the root of your eclipse's project.
2) Insert the following entry to the file:
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
</attributes>
</classpathentry>
Then, rebuild your project at eclipse (Project->Clean-Build).
You now can check at the Java Build Path of you project at the Libraries tab the Maven Dependencies included:
Problem solved!
I don't know what exactly solved it, but I did 4 things in Eclipse:
Window->Preferences: Maven->Installations: Global settings -> open file and hardcoded localRepository
Project->Clean
right click on project: Maven->Update dependencies
right click on project: Maven->Update project configuration
I guess it was the Update dependencies since right after first two there were no change.
I'm also new to Eclipse, and I've been having a similar problem where Eclipse just won't recognize an import statement, even though all signs point to the dependency having been successfully downloaded.
You should check that your dependency file has actually been downloaded by going to the command line and typing
mvn dependency:tree
If you see your package there, then but Eclipse doesn't acknowledge it, the thing that works for me (sometimes) is to go to the terminal, cd into the project folder, and type
mvn eclipse:clean
then
mvn eclipse:eclipse
Finally refresh project in eclipse
I don't know why this works, and sometimes it doesn't work once, then doing it again does work... so worth a try!
I had this issue for dependencies that were created in other projects. Downloaded thirdparty dependencies showed up fine in the build path, but not a library that I had created.
SOLUTION: In the project that is not building correctly,
Right-click on the project and choose Properties, and then Maven.
Uncheck the box labeled "Resolve dependencies from Workspace
projects"
Hit Apply, and then OK.
Right-click again on your project and do a Maven->Update Snapshots
(or Update Dependencies)
And your errors should go away when your project rebuilds (automatically if you have auto-build enabled).
My Project was just screwed up. Here is how I fixed it for Eclipse Indigo x64 (J2EE 3.7.3):
Deleted my POM file (backedup of course).
Project Context Menu > Maven > Disable Maven Nature.
Deleted the project (but not contents on disk).
Re-imported as Import > General > Existing Project.
Project Context Menu > Configure > Convert to Maven Project....
Accept defaults from Maven wizard.
Overwrite POM with your backedup POM. (Now you have Maven Dependencies folder).
Maven Update/Clean for good measure.
Hope that helps someone. :)
Well, I tried everything posted here, unfortunately nothings works in my case. So, trying different combinations I came out with this one that solved my problem.
1) Open the .classpath file at the root of your eclipse's project.
2) Insert the following entry to the file:
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
</attributes>
</classpathentry>
Then, rebuild your project at eclipse (Project->Clean-Build).
For me the problem was maven couldn't find the settings.xml file which is located in myMavenFolder\conf.
What I did to fix the issue was to select the right location of the settings.xml file from eclipse:
Window -> Preferences -> Maven -> User Settings
Finally, hit apply and update your project
Just in case anybody has tried all the other options and you are still stuck, try right-clicking on the project folder, head over to Maven option and click the "add dependency" button. For some reason Eclipse isn't updating the dependencies manually from the pom.xml at first try.
I had a similar problem. I solved it by running the Maven->Update Project Configuration action
So I'm about 4 or 5 years late to this party, but I had this issue after pulling from our repo, and none of the other solutions from this thread worked out in my case to get rid of these warnings/errors.
This worked for me:
From Eclipse go to to Window -> Preferences -> Maven (expand) -> Errors/Warnings. The last option reads "Plugin execution not covered by lifecycle configuration" - use the drop-down menu for this option and toggle "Ignore", then Apply, then OK. (At "Requires updating Maven Projects" prompt say OK).
Further Info:
This may not necessarily "fix" the underlying issue(s), and may not qualify as "best practice" by some, however it should remove/supress these warnings from appearing in Eclipse and let you move forward at least. Specifically - I was working with Eclipse Luna Service Release 1 (4.4.1) w/ Spring Dashboard & Spring IDE Core (3.6.3), and m2e (1.5) installed, running on Arch Linux and OpenJDK 1.7. I imported my project as an existing maven project and selected OK when warned about existing warnings/errors (to deal with them later).
(Sorry, I'm not a designer, but added picture for clarity.)
For the following steps worked in my case:
1 On eclipse, right click on the desired project Maven -> Disable Maven Nature
2 Right click again then go to Properties. Delete every evidence of external Maven dependency leaving only JRE System Library.
3 Right click one more time on the project then go to Configure -> Convert to Maven Project
None of the solutions above worked for me, so this answer is for anyone else in my situation. I eventually found the problem myself, and a different solution. The pom.xml file contained a dependencyManagement tag that wrapped the dependencies, and M2Eclipse would not add the Maven Dependencies folder when this was present. So, I removed this tag, then carried out the solution offered by Ualter Jr., and Eclipse immediately added the missing folder!
Here is the steps which i followed.
1. Deleted maven project from eclipse.
2. Deleted all the file(.setting/.classpath/target) other than src and pom from my source folder.
3. imported again as a maven project
4. build it again, you should be able to see maven dependencies.
This is how I solved it
Window->Preferences: Maven->User Settings (Click on "open file" in resulting window, or just edit settings.xml with an external text editor like Notepad)
Make sure localRepository (which is displayed in this window) is correct. I had a typo in my file.
Once you have corrected settings.xml, click on Update Settings, which is on this same Preferences->Maven->User Settings screen.
Now rebuild, and it will install the latest JAR's in the correct location.
My answer is similar to that of #JerylCook: find another .classpath file in a working Maven project, edit your bad ones as that good working ones. The key is to add
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
in every <classpathentry> of type con and src. Don't forget to change <classpathentry .... /> to <classpathentry ...>xxx</classpathentry>.
At last, update the maven project and reinstall/rebuild in maven.
I got this error when had an error in Pom.
Run mvn eclipse:eclipse command on console to check that pom is parsable or not.
If not parsable search for the error.
If you have "nested paths" errors after performing Maven -> Update Project Configuration (or in Juno it's "Update Configuration...") then your build path is misconfigured.
Right-click project -> Build Path -> Configure Build Path
Ensure that only '/src' and directories at that level are included. If you have e.g. '/src' and also '/src/main/resources' present, this is incorrect. The second resource ('/src/main/resources') is "nested" under the first ('/src') which is causing your inability to import resources, since it prevents eclipse from seeing maven dependencies.
My issue sounds similar so I'll add to the discussion. I had cancelled the import of an existing maven project into Eclipse which resulted in it not being allowed to Update and wouldn't properly finish the Work Space building.
What I had to do to resolve it was select Run As... -> Maven build... and under Goals I entered dependency:go-offline and ran that.
Then I right clicked the project and selected Maven -> Update Project... and updated that specific project.
This finally allowed it to create the source folders and finish the import.
I could solve the error by
1) Right click (your maven project) -> maven -> maven install
After successful installation
2) Right click (your maven project) -> maven -> update project. And the whole error of maven got solved!
For me it was sufficient add a buildCommand (org.eclipse.m2e.core.maven2Builder) and a nature (org.eclipse.m2e.core.maven2Nature) in the .project file, like this:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>iText</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>
and I had
I had a similar issue and have tried all the answers in this post. The closest I had come to resolving this issue was by combining the Joseph Lust and Paul Crease solutions. I added the backed up pom.xml file after deleting and reimporting the project, and nothing showed up until I deleted the dependency management tag in the pom.xml and magically the dependencies folder was there.
However, it broke up the child POM's since they need the parent pom.xml dependency management to function, and as a result my MVN was not functioning properly on the project either from Eclipse or the command line, giving a broken pom.xml error.
The last solution if all fails, is to manually import the .jar files needed by your project. Right click the project Properties -> Java Build Path -> Libraries and Add external Jar.
If your MVN is working correctly from the command line and you have done a successful build on the project, you will have all the repos needed in your .m2/repository folder. Add all the external jars mentioned in your dependencies tag of pom.xml and you will see a referenced library section in your Eclipse, with all the pesky red errors gone.
This is not the optimal solution, but it will let you work in Eclipse without any errors of missing dependencies, and also allow you to build the Maven project both from Eclipse and command line.
This same problem happened to me, and it was because there an error in downloading a jar due to repo issues, indicated by a red flag in the pom.xml.
I added another repository so the red flag in the pom.xml disappeared and Eclipse then loaded the pom again, resolved its issue and listed the maven dependencies in Project Explorer. it sounds simple and obvious to resolve visible issues, but since Eclipse was quite happy to run maven, and build successfully, it was not obvious that the red flag and repo issue were at the root of its unwillingness to parse the pom and list the maven dependencies
mvn eclipse:clean
then from eclipse: "Maven Update Project" does the trick!
update the .classpath to below will work every time.
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="WEB-INF/" kind="src" path="src/main/webapp"/>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Maven Dependencies: What solved it for me in Eclipse?
I added the dependency in the "pom" file. I did a build, but could not see the Maven Dependency in the Eclipse.
Next Step: Closed the project.
Then Reopened the project.
I could see the Maven dependencies.
I experienced a similar problem lately after i created a maven project, the maven dependencies folder did not appear in the project structure.To solve this simply add any dependency in the pom file, such as in code below, or right-click on the project and go to maven and select add dependency, search for any dependency such as junit add this, and the maven dependency should appear on your project structure now.
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.9.RELEASE</version>
<scope>runtime</scope>
</dependency>
</dependencies>
Just right click over Project folder and under maven > Update project > Select your project > OK.
it will automatically download all dependencies under pom.xml to folder named Maven Dependencies.
Open the .classpath file at the root of your eclipse's project.
It's so amazing that this one problem has so many different causes and possible solutions. I found yet a different solution that worked for me.
Well, it's not so much a solution but a discovery: I can see the Maven Dependencies node in the Package Explorer, which is the default for the Java perspective, but I can not see it in the Java EE perspective, which uses the Project Explorer by default. Both of those explorers look very similar at quick glance, so you may expect to see the Maven Dependencies in both.
As I was trying to figure this out, I hadn't realized that difference, so it wasn't really a problem for me in the end after all.
the whole project looked weird in eclipse, maven dependencies folder were missing, it showed some types as unknown, but I was able to build it successfully in maven. What fixed my issue was adding gen folder to source path on project build path.
Probably this is similar to this Android /FBReaderJ/gen already exists but is not a source folder. Convert to a source folder or rename it

How to set javadoc path for a jar in a project using Eclipse

I'm using JUnit 3 in Eclipse Galileo. The junit.jar (located in the project in vendor/lib/) contains both the classes and the javadoc. In my project which I share using CVS, I want the doc to be available for everybody who checks-out the project. So I committed the .classpath file.
When adding the javadoc path to the lib using the Eclipse UI I get the following classpath entry:
<classpathentry kind="lib" path="vendor/lib/junit.jar">
<attributes>
<attribute name="javadoc_location" value="jar:platform:/resource/MyProject/vendor/lib/junit.jar!/javadoc"/>
</attributes>
</classpathentry>
Note that "MyProject" is the local name of the Project. This name is not necessarily the same for each person on the team (also I have multiple local copies, which must have different names). So this classpath entry is not portable from one copy of the project to another.
What I want to achieve is a javadoc location which is only relative to the project (as is the lib files location for example).
I tried the following without success:
<classpathentry kind="lib" path="vendor/lib/junit.jar">
<attributes>
<attribute name="javadoc_location" value="jar:file:vendor/lib/junit.jar!/javadoc"/>
</attributes>
</classpathentry>
How should I set the classpath entry so that the javadoc is taken from a jar in the project without reference to the platform or external location?
May be you have to place the folder "MyProject" to CVS so that everyone will get same folder name.
My understanding, a big project usually contains many eclipse projects and we often put them together in one folder. like:
+trunk/
+ MyProject
+ module1
+ module2
+ .....
+ modulen
+ YourProject
+ yourModule1
+ yourModule2
+ .....
+ yourModulen
It works fine to me until now.
As far as I understand, if your jar file is not in the root of the project, you must use an absolute path to reference it. If you would like to use a relative path to the project, you might have to consider moving the jar file to the root of the project.
HTH,
Jc