[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [m2e-users] M2E Update Project issue
|
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
>