在Querydsl中生成Qclasses时,Maven构建和JDK的Eclipse问题

时间:2014-06-30 02:36:25

标签: java eclipse maven querydsl

当我在pom.xml添加以下代码以支持 Querydsl

<plugin>
  <groupId>com.mysema.maven</groupId>
  <artifactId>apt-maven-plugin</artifactId>
  <version>1.0.6</version>
  <executions>
    <execution> 
      <goals>
        <goal>process</goal>
      </goals>
      <configuration>
        <outputDirectory>target/generated-sources/java</outputDirectory>
        <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
      </configuration>
    </execution>
  </executions>
</plugin>

使用Eclipse构建时出现此错误。我认为它与classpath和JDK jar有关系

You need to run build with JDK or have tools.jar on the classpath.
If this occures during eclipse build make sure you run eclipse under  JDK as well 
(com.mysema.maven:apt-maven-plugin:1.0.6:process:default:generate-sources)

.classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v8.0">
        <attributes>
            <attribute name="owner.project.facets" value="jst.web"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>


额外信息:

enter image description here

我的maven安装

enter image description here

JAVA_HOME:C:\ Program Files \ Java \ jdk1.7.0_45
路径:%JAVA_HOME%\ bin;

9 个答案:

答案 0 :(得分:45)

解决方案1 ​​

遵循此link

  

&#34; Maven APT插件存在一个阻止其使用的已知问题   直接来自Eclipse。 Eclipse用户必须创建Querydsl查询   通过运行命令mvn generate-sources at命令手动输入类型   。提示&#34;

所以我在我的项目文件管理器中使用控制台mvn generate-sources执行命令行cmd,然后生成了我的Qclasses。

来自@ informatik01评论的

解决方案2

我们可以在eclipse.ini中明确specified JVM,就像那样:

-vm
C:\Program Files\Java\jdk1.7.0_45\bin\javaw.exe

-vmargs
...

-vm选项必须在-vmargs选项之前发生,有关更多信息,请参阅下面的@ informatik01评论。

答案 1 :(得分:5)

你可以在pom中试试这个:

<plugin>
  <groupId>com.mysema.maven</groupId>
  <artifactId>apt-maven-plugin</artifactId>
  <version>1.0.6</version>
  <executions>
    <execution> 
      <goals>
        <goal>process</goal>
      </goals>
      <configuration>
        <outputDirectory>target/generated-sources/java</outputDirectory>
        <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
      </configuration>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>com.sun</groupId>
      <artifactId>tools</artifactId>
      <version>1.7</version>
      <scope>system</scope>
      <systemPath>${java.home}/../lib/tools.jar</systemPath>
     </dependency>
  </dependencies>
</plugin>

看看它是否有所改变。它应该在构建路径中强制使用tools.jar。


编辑。由于这没有帮助,请尝试指定

-vm 
D:/work/Java/jdk1.6.0_13/bin/javaw.exe

在eclipse.ini中(单独的行很重要),如this thread中所述。

答案 2 :(得分:1)

<groupId>com.mysema.maven</groupId>
        <artifactId>maven-apt-plugin</artifactId>
        <version>1.0.6</version>
        <executions>
            <execution>
                <goals>
                    <goal>process</goal>
                </goals>
                <configuration>
                        <outputDirectory>target/generated-sources/java</outputDirectory>
                        <processor>com.mysema.query.apt.jpa.JAPAnnotationProcessor</processor>
                </configuration>
            </execution>
        </executions>
    </plugin>

添加插件,你将解决它

答案 3 :(得分:1)

这个问题发生在我身上,因为如上所述,Eclipse本身正在运行JRE而不是JDK。

我通过将%JAVA_HOME%\ bin 添加到我的PATH环境变量的前面来解决它。

我通过阅读Find out what JVM Eclipse is running on

找出了JVM eclipse正在使用的内容

答案 4 :(得分:1)

我终于做到了!我尝试了很多选择,例如thisthis,但是没有运气。然后,我读了这个comment来挽救了我的性命,真的,谢谢!我遵循此解决方案,它突然起作用了!在我的情况下应该被接受。

  

执行mvn全新安装后,我将tools.jar从C:\ Program Files \ Java \ jdk1.8.0_151 \ lib复制到C:\ Program Files \ Java \ jre1.8.0_151 \ lib – @julio mulcue burbano

答案 5 :(得分:0)

如果你通过shell commond构建,比如mvn install。然后在shell或cmd窗口中运行此命令:echo $ CLASSPATH。此命令显示您的类路径。

如果您使用的是Eclipse,请打开Window&gt;偏好&gt; Java&gt;安装好的JRE,确保已安装的JRE是jdk根位置。对我来说,它是C:\ Java \ jdk1.7.0_51

希望它有所帮助。

答案 6 :(得分:0)

尝试在Eclipse中更新JDK,如下所示:

将JRE设置为

查看下面的路径 - 拥有program files(但在您提到的路径中,路径中没有program files,通常是java,所有程序都安装在program files中,所以请确保那道路)

 Window->Preferences...->Java->Installed JREs:

JRE type: Standard VM JRE 
Name: jdk1.6.0_18
JRE home directory: C:\Program Files (x86)\Java\jdk1.6.0_18

alos确保JAVA_HOME路径正确设置为JDK\bin(没有任何空格和所有路径)

尝试将JDK复制到其他位置,然后使用该新位置更新JAVA_HOME

让我知道其他任何问题。

答案 7 :(得分:0)

请勿忘记在Eclipse项目设置中检查执行环境的设置:项目构建路径 - &gt;图书馆 - &gt; JRE系统库

如果这是错误的(例如 jre ),请将其切换为 jdk

就我而言,这解决了这个问题(&#34;您需要使用JDK运行构建或在类路径上使用tools.jar。&#34;消失)。

然后约。 Maven运行日志中的第四行从(例如)

更改
...
Java home: C:\Program Files\Java\jre1.8.0_66
....

 ...
 Java home: C:\Program Files\Java\jdk1.8.0_66\jre
 ...

希望这有帮助。

答案 8 :(得分:0)

我已经完成了上面提出的所有建议,但无济于事。最后,因为我正在设置一台新计算机,所以我意识到我没有设置JAVA_HOME变量。

所以我所做的就是将JAVA_HOME变量添加到我的系统变量中并将其设置为JDK路径:C:\Program Files\Java\jdk1.8.0_172

瞧 - mvn generate-resources再次开始工作。