问题
Problem
I have a working project in IntelliJ 2018.3 for Vaadin 11, created using the Project Base starter-pack.
➥ How do I switch from Vaadin 11.0.0 to Vaadin 12.0.0.alpha4 ?
My Question here is similar to this one, Vaadin 8 alpha/beta prerelease fail with “Non-resolvable import POM: Failure to find” errors. The solution on that page was to enable a vaadin-prerelease
checkbox in the Profiles list in the Maven sidebar of IntelliJ. But with a Vaadin 11 project, the only such checkbox found there is labeled production-mode
.
Failed Solution
In the project’s Maven POM file, pom.xml
, I tried switching:
<vaadin.version>11.0.0</vaadin.version>
…to:
<vaadin.version>12.0.0.alpha4</vaadin.version>
…having taken that version number string from the currently published JavaDoc site.
When executing a Maven clean
with this version number in place, I get these errors:
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] Non-resolvable import POM: Failure to find com.vaadin:vaadin-bom:pom:12.0.0.alpha4 in http://maven.vaadin.com/vaadin-addons was cached in the local repository, resolution will not be reattempted until the update interval of Vaadin Directory has elapsed or updates are forced @ line 28, column 25
[ERROR] 'dependencies.dependency.version' for com.vaadin:vaadin-core:jar is missing. @ line 39, column 21
[ERROR] 'dependencies.dependency.version' for org.slf4j:slf4j-simple:jar is missing. @ line 46, column 21
@
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR] The project com.basilbourque.acme:acme:1.0-SNAPSHOT (/Users/basilbourque/IdeaProjects/Acme/pom.xml) has 3 errors
[ERROR] Non-resolvable import POM: Failure to find com.vaadin:vaadin-bom:pom:12.0.0.alpha4 in http://maven.vaadin.com/vaadin-addons was cached in the local repository, resolution will not be reattempted until the update interval of Vaadin Directory has elapsed or updates are forced @ line 28, column 25 -> [Help 2]
[ERROR] 'dependencies.dependency.version' for com.vaadin:vaadin-core:jar is missing. @ line 39, column 21
[ERROR] 'dependencies.dependency.version' for org.slf4j:slf4j-simple:jar is missing. @ line 46, column 21
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
回答1:
The easy way
Vaadin Ltd now makes this easier. They added a tab on the page listing starter-packs for a POM pre-configured to use the latest pre-release.
https://vaadin.com/start/pre-release
The manual way
I do not know if the following solution is proper, but it seems to be working. Unfortunately a solution is not documented on the Vaadin site, so I put in a request.
Configure prerelease Maven repositories
It seems the POM file built by the Project Base starter-pack lacks the necessary Maven configuration settings to find the alpha/beta pre-release versions of Vaadin.
As of 2018-11-15, for Vaadin 12.0.0.beta2, take a working project such as one created from "Project Base" on the Vaadin pago of starter-packs, and make the following changes. This works today, but I have had much trouble over past weeks. I suspect the problem was that some Maven or Vaadin repositories were not updated properly, and were missing some key file(s). At any rate, it works today.
First, find the latest alpha or beta version number at the Releases page for vaadin/platform on GitHub. Today that is 12.0.0.beta2
.
(1)
Refresh your local cache for Maven.
In IntelliJ 2018, choose Preferences
/Settings
> Build, Execution, Deployment
> Build Tools
> Maven
> Repositories
> Update
(button).
(2)
In the POM file of your project, change this:
<vaadin.version>11.0.2</vaadin.version>
… to this:
<vaadin.version>12.0.0.beta2</vaadin.version>
(3)
Inside the repositories
element, add this:
<repository>
<id>vaadin-prereleases</id>
<url>https://maven.vaadin.com/vaadin-prereleases</url>
</repository>
(4)
Below the repositories
element, add this:
<pluginRepositories>
<!-- Repository needed for prerelease versions of Vaadin -->
<pluginRepository>
<id>vaadin-prereleases</id>
<url>https://maven.vaadin.com/vaadin-prereleases</url>
</pluginRepository>
</pluginRepositories>
(5)
Perform a Maven clean
and install
.
Verify that your POM reports no errors.
Here is a complete working POM that I adapted from the Project Base found on the page of starter-packs.
To find my 3 changes, search for the phrasing: alphas-betas
<?xml version="1.0" encoding="UTF-8"?>
<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>com.basilbourque.acme</groupId>
<artifactId>acme</artifactId>
<name>Acme</name>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<failOnMissingWebXml>false</failOnMissingWebXml>
<!--<vaadin.version>11.0.2</vaadin.version>-->
<!--Change above line to line below for alphas-betas-->
<vaadin.version>12.0.0.beta2</vaadin.version>
</properties>
<repositories>
<!-- Repository used by many Vaadin add-ons -->
<repository>
<id>Vaadin Directory</id>
<url>http://maven.vaadin.com/vaadin-addons</url>
</repository>
<!--Add this for alphas-betas-->
<repository>
<id>vaadin-prereleases</id>
<url>https://maven.vaadin.com/vaadin-prereleases</url>
</repository>
</repositories>
<!--Add this for alphas-betas-->
<pluginRepositories>
<!-- Repository needed for prerelease versions of Vaadin -->
<pluginRepository>
<id>vaadin-prereleases</id>
<url>https://maven.vaadin.com/vaadin-prereleases</url>
</pluginRepository>
</pluginRepositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<type>pom</type>
<scope>import</scope>
<version>${vaadin.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-core</artifactId>
</dependency>
<!-- Added to provide logging output as Flow uses -->
<!-- the unbound SLF4J no-operation (NOP) logger implementation -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Jetty plugin for easy testing without a server -->
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.11.v20180605</version>
<configuration>
<scanIntervalSeconds>1</scanIntervalSeconds>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<!-- Production mode can be activated with either property or profile -->
<id>production-mode</id>
<activation>
<property>
<name>vaadin.productionMode</name>
</property>
</activation>
<properties>
<vaadin.productionMode>true</vaadin.productionMode>
</properties>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>flow-server-production-mode</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>${vaadin.version}</version>
<executions>
<execution>
<goals>
<goal>copy-production-files</goal>
<goal>package-for-production</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
来源:https://stackoverflow.com/questions/53028557/change-maven-driven-project-based-on-vaadin-11-to-vaadin-12-alpha-version