【问题标题】:Maven build for Grails 2.2.0 app fails with JDK 1.7: Could not find artifact com.sun:tools:jar:1.6使用 JDK 1.7 为 Grails 2.2.0 应用程序构建 Maven 失败:找不到工件 com.sun:tools:jar:1.6
【发布时间】:2013-02-23 04:33:20
【问题描述】:

(由于更新的问题/问题而更新了问题标题,请参阅底部的更新说明!):

我有一个 Grails 2.2.0 项目,通过“grails create-pom com.mycompany”为其创建了 pom.xml。

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

在不修改 pom.xml 的情况下,我使用 JDK 1.7 运行“mvn package”并得到以下错误,而使用 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

我看到 grails-maven-plugin-2.2.0.pom 中的 java 版本设置为 1.6,因此我现在的问题是:如何使我的 grails 项目的 maven 构建与 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

我的 pom.xml 中的相关 java 工具部分:

<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>

【问题讨论】:

    标签: maven grails maven-3


    【解决方案1】:

    这似乎是一个已知问题,据报道在 Mac OS X 上的 Grails 2.2.0 中仍然存在。

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

    【讨论】:

    • 我也有同样的问题。 Grails v2.2 和 Maven v3.0.3。你为此做了什么?
    • 目前使用 JDK 1.6。
    【解决方案2】:

    更新

    正如@Mathias 所提到的,这是 Grails Maven 插件中的一个错误。该问题已得到修复,并且在 Grails 2.2.1 中一切正常。


    我绝对可以将 mvn 包 与 Homebrew 的 Grails 2.2.0 一起使用,*GRAILS_HOME* 未设置。

    我的配置是 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 工件。
    • 如果没有,请尝试清除 grails-maven-plugin 的 ~/.m2/repository 内容。 rm -rf 那个特定的插件缓存。

    【讨论】:

    • 感谢您的提示。我和你有同样的环境,除了我设置了 GRAILS_HOME。但我刚刚发现,问题是我运行的是 JDK 1.7,这似乎不起作用。我刚换了JDK 1.6,清除了grails-maven-plugin的内容,现在可以正常使用了。
    • btw:我用上面的 JDK 1.7 尝试了你的 3 行来创建一个空白的 vanilla 应用程序,得到了同样的错误。 JDK1.7一般不推荐和grails一起使用吗? (对不起,Grails n00b)。我已经看过grails.1312388.n4.nabble.com/Grails-amp-Java-7-td4638502.htmlgrails.1312388.n4.nabble.com/Grails-amp-Java-7-td4638502.html,但他们说1.7 应该没问题。
    【解决方案3】:

    问题是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>
    </profiles>
    

    解决方法是将 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/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 2020-11-10
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 2013-09-19
      • 2014-07-12
      相关资源
      最近更新 更多