Maven для приложения Grails 2.2.0 не работает с JDK 1.7: не удалось найти артефакт com.sun: tools: jar: 1.6

(Обновленный заголовок вопроса из-за обновленного вопроса/проблемы, см. мои примечания по обновлению внизу!):

У меня есть проект Grails 2.2.0, созданный pom.xml для него через 'grails create-pom com.mycompany'.

pom.xml: http://pastebin.com/AVahZjZF

Без изменений в pom.xml я запускаю 'mvn package' с JDK 1.7 и получая ошибку ниже, в то время как с JDK 1.6 он будет работать нормально.

$ java -version
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
$ mvn -version
Apache Maven 3.0.3 (r1075438; 2011-03-01 01:31:09+0800)
Maven home: /usr/share/maven
Java version: 1.7.0_11, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.7.4", arch: "x86_64", family: "mac"
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home
$ mvn package
[INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR] 
[ERROR] The project com.company:company-projectname:0.1 (/Users/myuser/Projects/com.company.web/pom.xml) has 2 errors
[ERROR] Unresolveable build extension: Plugin org.grails:grails-maven-plugin:2.2.0 or one of its dependencies could not be resolved: Could not find artifact com.sun:tools:jar:1.6 at specified path /Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/jre/bundle/Classes/classes.jar -> [Help 2]
[ERROR] Unknown packaging: grails-app @ line 8, column 16
[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/PluginResolutionException

Я вижу, что версия java установлена ​​в 1.6 в grails-maven-plugin-2.2.0.pom, поэтому теперь мой вопрос: как сделать сборку maven для моего проекта grails с JDK 1.7? Похоже, что правильный исходный и целевой уровень установлен в maven-compiler-plugin (установлен в 1.6).

Папка ~/.m2/repository/grails-maven-plugin:

Моя среда:

  • Maven 3.0.3
  • Grails 2.2.0
  • GRAILS_HOME установлен в мой каталог Grails
  • JAVA_HOME установлен в папку JDK 1.7
  • JDK 1.7.0_11

Соответствующий раздел инструментов java в моем pom.xml:

<profiles>
 <profile>
 <id>tools</id>
 <activation>
 <property>
 <name>java.vendor</name>
 <value>Sun Microsystems Inc.</value>
 </property>
 </activation>
 <dependencies>
 <dependency>
 <groupid>com.sun</groupid>
 <artifactid>tools</artifactid>
 <version>${java.version}</version>
 <scope>system</scope>
 <systempath>${java.home}/../lib/tools.jar</systempath>
 </dependency>
 </dependencies>
 </profile>
</profiles>
3 ответа

Кажется, это известная проблема и, как сообщается, все еще происходит в Grails 2.2.0 на Mac OS X.

http://jira.grails.org/browse/MAVEN-186


UPDATE

Как упоминалось @Mathias, это было ошибкой в ​​плагине Grails Maven. Проблема исправлена, и все отлично работает в Grails 2.2.1.

Я могу определенно использовать mvn-пакет здесь с Grails 2.2.0 от Homebrew, * GRAILS_HOME * unset.

Моя конфигурация - Maven 3.0.3 с Grails 2.2.0, на OSX.

Я создал "пустое" приложение для ванили без каких-либо проблем и упаковал его.

grails create-app stf && cd stf
grails create-pom com.rimerosolutions.grails
mvn package

В моем pom.xml версия grails-maven-plugin установлена ​​на ${grails.version}.

Я запускаю OSX, похоже, что вы тоже запускаете его.

  • Используете ли вы приватный репозиторий maven? Если да, попробуйте дважды проверить артефакт grails-maven-plugin.
  • Если нет, попробуйте очистить содержимое ~/.m2/repository для grails-maven-plugin. rm -rf, который имеет конкретный кеш плагина.


Проблема в том, что grails-maven-plugin говорит, что ему нужно что-то в JDK6:

tail -n20 ~/.m2/repository/org/grails/grails-maven-plugin/2.0.3/grails-maven-plugin-2.0.3.pom
 <profile>
 <id>jdk_mac</id>
 <activation>
 <os>
 <family>mac</family>
 </os>
 </activation>
 <dependencies>
 <dependency>
 <groupid>com.sun</groupid>
 <artifactid>tools</artifactid>
 <version>1.6</version>
 <scope>system</scope>
 <systempath>${java.home}/bundle/Classes/classes.jar</systempath>
 </dependency>
 </dependencies>
 </profile>

Решение состоит в том, чтобы скопировать JDK6 classes.jar в ваш текущий JDK. К счастью, JDK7 использует другую структуру каталогов, поэтому конфликт не должен быть.

sudo mkdir -p /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/bundle/Classes
sudo cp /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Classes/classes.jar /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/bundle/Classes/

licensed under cc by-sa 3.0 with attribution.