[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [m2e-users] M2E Update Project issue
|
Hi all!
Update on this, just to let you know:
The use of the build-helper-plugin did NOT HELP in our situation!
I think we will move the embedded libraries from the bundles and bring
them as osgi-enabled dependencies into the target platform. I assume,
this will then resolve the case.
2012/6/25 Markward Schubert <markward.schubert@xxxxxxxxx>:
> Hey Dave!
>
> Here is what I tried with the build-helper-plugin:
>
> <plugin>
> <groupId>org.codehaus.mojo</groupId>
> <artifactId>build-helper-maven-plugin</artifactId>
> <version>1.7</version>
> <executions>
> <execution>
> <id>add-test-resource</id>
> <phase>generate-test-sources</phase>
> <goals>
> <goal>add-test-resource</goal>
> </goals>
> <configuration>
> <resources>
> <resource>
> <directory>lib</directory>
> </resource>
> </resources>
> </configuration>
> </execution>
> </executions>
> </plugin>
>
>
> "lib" in this case is the name of the folder, where the jars of the
> embedded libraries live in my project. This SEEMS to have solved the
> problem with my workspace. As I had the impression that the problem
> did not occur in 100% of the cases, I can not guarantee, that this
> works, but I will keep you informed.
>
>
> Next is a shortened version of the pom from our p2-repository plugin.
> I guess we are using nearly all possible ways to pull in dependencies
> into a maven-project. Some local files, some ordingary dependencies
> with transient dependency resolution and some via the
> maven-dependency-plugin. See also the comments please.
>
> If you have any further questions, just ask, maybe I can help.
>
> <project xmlns="http://maven.apache.org/POM/4.0.0"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> http://maven.apache.org/xsd/maven-4.0.0.xsd">
> <modelVersion>4.0.0</modelVersion>
>
> <properties>
> <tycho-version>0.13.0</tycho-version>
> <outputfolder>${project.build.directory}/source/plugins</outputfolder>
> </properties>
>
> [...]
>
>
> <artifactId>p2-repository</artifactId>
> <packaging>pom</packaging>
>
> <dependencies>
>
> <!-- springframework dependencies edited by FlowFact -
> MANIFEST.MF contains
> info: eclipse-BuddyPolicy: global -->
>
> <dependency>
> <groupId>org.springframework</groupId>
> <artifactId>osgi.core</artifactId>
> <version>1.2.0.FF</version>
> <scope>system</scope>
> <systemPath>${project.basedir}/lib/plugins/org.springframework.osgi.core_1.2.0.FF.jar</systemPath>
> </dependency>
>
> </dependencies>
>
> <build>
> <plugins>
>
> <!-- The following plugin downloads all bundles which are
> not transitive
> dependencies of rcp-api. Also if we must have two
> different versions of a
> dependency in the target platform, those must be
> declared here, as there
> is no version management for the artifacts below. -->
>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-dependency-plugin</artifactId>
> <version>2.3</version>
> <executions>
> <execution>
> <id>copy</id>
> <phase>prepare-package</phase>
> <goals>
> <goal>copy</goal>
> </goals>
> <configuration>
>
> <artifactItems>
>
> <artifactItem>
> <groupId>org.apache.commons</groupId>
>
> <artifactId>com.springsource.org.apache.commons.codec</artifactId>
> <version>1.4.0</version>
>
> <outputDirectory>${outputfolder}</outputDirectory>
> </artifactItem>
>
> <artifactItem>
> <groupId>javax.persistence</groupId>
>
> <artifactId>com.springsource.javax.persistence</artifactId>
> <version>2.0.0</version>
>
> <outputDirectory>${outputfolder}</outputDirectory>
> </artifactItem>
>
> [...]
>
> </artifactItems>
> </configuration>
> </execution>
> </executions>
> </plugin>
>
> <!-- Configuration for the PublishFeaturesAndBundlesMojoTest -->
> <plugin>
> <groupId>org.eclipse.tycho.extras</groupId>
> <artifactId>tycho-p2-extras-plugin</artifactId>
> <version>${tycho-version}</version>
> <executions>
> <execution>
> <phase>package</phase>
> <goals>
> <goal>publish-features-and-bundles</goal>
> </goals>
> </execution>
> </executions>
> <configuration>
> <compress>false</compress>
> </configuration>
> </plugin>
>
> <!-- Additional two build plug-ins that allow to also
> build this project
> from the command line -->
> <!-- Copying an artifact to location
> ${project.basedir}/target/source/plugins
> is only one way how to create content to be published.
> Any other source of
> bundles and/or features can be used to be published as
> long as it end up
> in ${project.basedir}/target/source/plugins and or
> ~/features The publisher
> will use every content that is located in this directory -->
> <plugin>
> <artifactId>maven-dependency-plugin</artifactId>
> <executions>
> <execution>
> <id>copy-bundles-for-publishing</id>
> <phase>process-resources</phase>
> <goals>
> <goal>copy-dependencies</goal>
> </goals>
> <configuration>
>
> <outputDirectory>${project.basedir}/target/source/plugins</outputDirectory>
> </configuration>
> </execution>
> </executions>
> </plugin>
> </plugins>
> </build>
>
> </project>
>
>
>
>
>
>
> 2012/6/22 Dave Hartnoll <dhartnoll@xxxxxxxxxxxxxxxxx>:
>> Hi Markward,
>>
>>
>>
>> Thanks for your input. What you describe in your first paragraph certainly
>> fits with my own observations and suggests there may be an issue with m2e
>> (or maybe it’s being stretched beyond its intended functionality – I’m not
>> sure yet).
>>
>>
>>
>> I’d be interested to see specifically what you did with
>> build-helper-maven-plugin. I had already come across it and read a little
>> about it, but was unsure how I might configure it to help the situation.
>>
>>
>>
>> <off-topic>
>>
>> We used to have our external libs linked statically. However, when we
>> recently switched to a Maven build process, I wanted to set everything up as
>> neat as possible to help with maintenance in the future. That’s why I’m
>> trying to get Maven to re-package the libraries for OSGi in a standard way.
>> The example I posted was for log4j, and you are right that there are already
>> OSGi versions of it available. However, the same is not necessarily true for
>> all libraries so I need a standard way to build them (two other examples are
>> clojure.org:clojure:1.4.0, and another compound library that I build from
>> net.sourceforge.cssparser:cssparser:0.9.7 and org.w3c.css:sac:1.3).
>>
>>
>>
>> I’d also be interested in details of how to create the maven-generated p2
>> repository from a collection of libraries as it might be a good alternative
>> to the repackaging. Could you provide a reference or perhaps even share the
>> relevant part of your pom?
>>
>> </off-topic>
>>
>>
>>
>> Thanks and Regards,
>>
>> Dave.
>>
>>
>>
>>
>>
>> From: m2e-users-bounces@xxxxxxxxxxx [mailto:m2e-users-bounces@xxxxxxxxxxx]
>> On Behalf Of Markward Schubert
>> Sent: 22 June 2012 16:18
>> To: Maven Integration for Eclipse users mailing list
>> Subject: Re: [m2e-users] M2E Update Project issue
>>
>>
>>
>> Hi Dave!
>>
>> I think we have/had a similar issue here. We have plenty of manifest first
>> projects, among them three with a legacy folder named "lib", where some
>> repackaged libs reside. Whenever we change a branch, the ide notices, that
>> the projects are not up to date anymore and suggests a call of "Update
>> Project Configuration". Doing this will in the first call "destroy" these
>> project's project-setup with an error message. Then triggering "Update
>> Project Configuration" again, repairs the project.
>>
>> Today I was experimenting with the build-helper-maven-plugin.
>> I am adding the librarie's directory in the plugins configuration and the
>> issue seems to be at least reduced, if not resolved.
>>
>> But: We have the external libs statically in our projects and do not fetch
>> them as part of the maven build process.
>>
>> I don't know if i missed something in your requirements, but do you know the
>> Spring Enterprise Bundle Repository at http://ebr.springsource.com ?
>>
>> They have osgi-copatible versions of many commonly used libraries. Also we
>> made the experience, that recent versions of popular libraries are osgi
>> compatible in the meantime. We collect these in our project in a maven
>> generated p2-repository, which we use in our targetplatform, so we do not
>> need to repackage them.
>>
>> Hope I could help a bit.
>>
>> Regards,
>> Markward
>>
>>
>>
>>
>>
>> 2012/6/22 Dave Hartnoll <dhartnoll@xxxxxxxxxxxxxxxxx>
>>
>> I am aware of maven-dependency-plugin not being supported. However, I am
>> fairly certain that my use of it in the project is safe, and is not the
>> cause of the .classpath anomalies I highlighted. As I mentioned in the
>> original post, I am getting similar .classpath issues on a multi-package
>> maven-structured Java project. This other project definitely does not use
>> the maven-dependency-plugin.
>>
>> It's difficult to re-construct this simple project without
>> maven-dependency-plugin as I need somehow to get the dependent library
>> copied into the workspace. However, I can simply comment-out the references
>> to the plugin after the project has been built for the first time as the
>> library is then always present in target/libs (until a clean is done). After
>> saving the pom with maven-dependency-plugin removed, and re-running Update
>> Project several times, I still see the same .classpath anomolies.
>>
>> Dave.
>>
>> -----Original Message-----
>> From: m2e-users-bounces@xxxxxxxxxxx [mailto:m2e-users-bounces@xxxxxxxxxxx]
>> On Behalf Of Igor Fedorenko
>> Sent: 22 June 2012 14:50
>> To: m2e-users@xxxxxxxxxxx
>> Subject: Re: [m2e-users] M2E Update Project issue
>>
>> Running maven-dependency-plugin inside workspace is not supported. From m2e
>> wiki [1]
>>
>> <quote>
>> Beware that m2e does not provide any safeguards against rogue maven plugins
>> that leak classloaders, modify random files inside workspace or throw nasty
>> exceptions to fail the build. Use this as the last resort and make sure you
>> know what you are doing.
>> </quote>
>>
>> Can you reproduce the problem without this?
>>
>> [1]
>> http://wiki.eclipse.org/M2E_plugin_execution_not_covered#execute_plugin_goal
>>
>> --
>> Regards,
>> Igor
>>
>> On 12-06-22 9:23 AM, Dave Hartnoll wrote:
>>> I am putting together a large Eclipse RCP project using Eclipse 3.7.2,
>>> Tycho 0.15.0 and m2e 1.1 latest. On several occasions, I have seen errors
>>> along the lines of "The project is not up to date with the pom. Run Update
>>> Project" (paraphrasing from memory). This happens more often when updating a
>>> project from source control such as when committing changes from one PC and
>>> updating on another. The problem is that running Maven->Update Project...
>>> does not always resolve the problem immediately - it sometimes has to be run
>>> twice - with no net change in any of the project data.
>>>
>>> I've managed to extract and simplify a single small project that can be
>>> used to repeat some of the anomalies I am seeing. This project simply
>>> repackages a standard jar library (Log4j) as an OSGi plug-in. There may be
>>> better ways to do this, and as an aside I'd be interested to hear them, but
>>> this is really irrelevant for now as I get similar issues with a larger
>>> multi-package maven-structured Java project too.
>>>
>>> The attached .zip contains the necessary Eclipse project files.
>>> 1. Create a new general project (File->New->Project... then
>>> General->Project)
>>> 2. Copy the contents of the .zip to the project (overwriting the
>>> existing .project file).
>>> 3. Right-click project, choose Run As->Maven build
>>> 4. In the 'Edit Configuration' dialogue, type 'package' into the Goals
>>> field
>>> 5. Click 'Refresh' tab; click 'Refresh resources upon completion'
>>> 6. Click 'Run'
>>>
>>> Maven should now download some artifacts and build the OSGi version of the
>>> Log4j library.
>>>
>>> Next, open the .classpath from the project so you can see what happens
>>> during the next steps. (If you can't see .classpath, open the Package
>>> Explorer menu - the down-pointing white triangle - and select
>>> 'Filters...'. In the next dialogue, uncheck '.* resources' and click
>>> OK.)
>>>
>>> Now here is the weird behaviour...
>>> a. Right-click the project and select 'Maven->Update Project...'.
>>> Click OK in the next dialogue.
>>> b. Notice what happens to the contents of .classpath
>>>
>>> Repeat steps a and b a few more times and notice how eventually the
>>> project toggles between two states, one of which is OK (but contains more
>>> than necessary) and the other which has errors - the .classpath only
>>> references a 'classes' folder (that is also not necessary), but loses the
>>> reference to the needed library.
>>>
>>> I'm not sure if this is purely an m2e bug or an
>>> understanding/configuration issue that has caused m2e to behave strangely.
>>> Any help gratefully received. (NB: although I'm using m2e 1.1 latest from
>>> sonatype's repo, I'm seeing similar issues with m2e 1.0 from eclipse.org).
>>>
>>> Dave.
>>>
>>> P.S. In case anyone can't access the .zip file, I've listed the 5
>>> files that seed the Eclipse project below
>>>
>>> =====================================================
>>> META-INF\MANIFEST.MF
>>> =====================================================
>>> Manifest-Version: 1.0
>>> Bundle-ManifestVersion: 2
>>> Bundle-Name: Log4j as OSGI plugin
>>> Bundle-SymbolicName: jar2plugin.log4j
>>> Bundle-Version: 1.2.16
>>> Bundle-ClassPath: target/libs/log4j-1.2.16.jar
>>> Export-Package: org.apache.log4j,
>>> org.apache.log4j.xml
>>> Bundle-RequiredExecutionEnvironment: JavaSE-1.6
>>>
>>>
>>> =====================================================
>>> .classpath
>>> =====================================================
>>> <?xml version="1.0" encoding="UTF-8"?> <classpath>
>>> <classpathentry kind="lib" path="target/libs/log4j-1.2.16.jar"/>
>>> </classpath>
>>>
>>>
>>> =====================================================
>>> .project
>>> =====================================================
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <projectDescription>
>>> <name>jar2plugin.log4j</name>
>>> <comment></comment>
>>> <projects>
>>> </projects>
>>> <buildSpec>
>>> <buildCommand>
>>> <name>org.eclipse.pde.ManifestBuilder</name>
>>> <arguments>
>>> </arguments>
>>> </buildCommand>
>>> <buildCommand>
>>> <name>org.eclipse.m2e.core.maven2Builder</name>
>>> <arguments>
>>> </arguments>
>>> </buildCommand>
>>> </buildSpec>
>>> <natures>
>>> <nature>org.eclipse.m2e.core.maven2Nature</nature>
>>> <nature>org.eclipse.pde.PluginNature</nature>
>>> <nature>org.eclipse.jdt.core.javanature</nature>
>>> </natures>
>>> </projectDescription>
>>>
>>>
>>> =====================================================
>>> build.properties
>>> =====================================================
>>> bin.includes = META-INF/,\
>>> .,\
>>> target/libs/log4j-1.2.16.jar
>>>
>>>
>>> =====================================================
>>> pom.xml
>>> =====================================================
>>> <project xmlns="http://maven.apache.org/POM/4.0.0"
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>> <modelVersion>4.0.0</modelVersion>
>>> <groupId>jar2plugin</groupId>
>>> <artifactId>jar2plugin.log4j</artifactId>
>>> <version>1.2.16</version>
>>> <packaging>eclipse-plugin</packaging>
>>>
>>> <properties>
>>> <tycho-version>0.15.0</tycho-version>
>>>
>>> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>>> </properties>
>>>
>>> <dependencies>
>>> <dependency>
>>> <groupId>log4j</groupId>
>>> <artifactId>log4j</artifactId>
>>> <version>1.2.16</version>
>>> <type>jar</type>
>>> <scope>compile</scope>
>>> </dependency>
>>> </dependencies>
>>>
>>> <build>
>>> <plugins>
>>>
>>> <plugin>
>>> <groupId>org.eclipse.tycho</groupId>
>>> <artifactId>tycho-maven-plugin</artifactId>
>>> <version>${tycho-version}</version>
>>> <extensions>true</extensions>
>>> </plugin>
>>>
>>> <plugin>
>>> <groupId>org.apache.maven.plugins</groupId>
>>>
>>> <artifactId>maven-dependency-plugin</artifactId>
>>> <executions>
>>> <execution>
>>> <id>copy-dependencies</id>
>>> <phase>initialize</phase>
>>> <goals>
>>>
>>> <goal>copy-dependencies</goal>
>>> </goals>
>>> <configuration>
>>>
>>> <excludeTransitive>true</excludeTransitive>
>>>
>>> <includeArtifactIds>log4j</includeArtifactIds>
>>>
>>> <outputDirectory>target/libs</outputDirectory>
>>>
>>> <overWriteReleases>true</overWriteReleases>
>>>
>>> <overWriteSnapshots>true</overWriteSnapshots>
>>>
>>> <overWriteIfNewer>true</overWriteIfNewer>
>>> </configuration>
>>> </execution>
>>> </executions>
>>> </plugin>
>>>
>>> </plugins>
>>>
>>> <pluginManagement>
>>> <plugins>
>>> <plugin>
>>> <groupId>org.eclipse.m2e</groupId>
>>>
>>> <artifactId>lifecycle-mapping</artifactId>
>>> <version>1.0.0</version>
>>> <configuration>
>>> <lifecycleMappingMetadata>
>>> <pluginExecutions>
>>>
>>> <pluginExecution>
>>>
>>> <pluginExecutionFilter>
>>>
>>> <groupId>org.apache.maven.plugins</groupId>
>>>
>>> <artifactId>maven-dependency-plugin</artifactId>
>>>
>>> <versionRange>[0.0.0,)</versionRange>
>>>
>>> <goals>
>>>
>>> <goal>copy-dependencies</goal>
>>>
>>> <goal>unpack</goal>
>>>
>>> </goals>
>>>
>>> </pluginExecutionFilter>
>>>
>>> <action>
>>>
>>> <execute>
>>>
>>> <runOnIncremental>false</runOnIncremental>
>>>
>>> </execute>
>>>
>>> </action>
>>>
>>> </pluginExecution>
>>> </pluginExecutions>
>>> </lifecycleMappingMetadata>
>>> </configuration>
>>> </plugin>
>>> </plugins>
>>> </pluginManagement>
>>> </build>
>>>
>>> </project>
>>>
>>>
>>>
>>> _______________________________________________
>>> m2e-users mailing list
>>> m2e-users@xxxxxxxxxxx
>>> https://dev.eclipse.org/mailman/listinfo/m2e-users
>>>
>>
>> _______________________________________________
>> m2e-users mailing list
>> m2e-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/m2e-users
>> _______________________________________________
>> m2e-users mailing list
>> m2e-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/m2e-users
>>
>>
>>
>>
>> _______________________________________________
>> m2e-users mailing list
>> m2e-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/m2e-users
>>