2017-07-12 88 views
1

这是情况。我在一个java/selenium/maven项目中。我没有测试类,因此项目 - >属性 - > Java构建路径 - >源中仅有两个“构建​​路径上的源文件夹”是:使用Eclipse,东西不断添加src/test/java到类路径

src/main/java和src/main/resources。另外,src/main/resources“Excluded”被设置为(None)。

我做一个Maven /更新项目...

现在出于某种原因的src/test/java下已添加和缺失,和src /主/ resouces已更改为**,排除一切该目录中的文件。

我做了更改,重做所有这些,保存,做一个Maven/Update项目,并再次回到这些更改。什么让我的项目更改我的.classpath?

编辑在添加.settings文件之前和之后。

执行Maven->更新项目之前:从问一个问题添加了pom.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" output="target/classes" path="src/main/java"> 
     <attributes> 
     <attribute name="optional" value="true"/> 
      <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"/> 
     </attributes> 
    </classpathentry> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> 
     <attributes> 
      <attribute name="maven.pomderived" value="true"/> 
     </attributes> 
    </classpathentry> 
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> 
     <attributes> 
      <attribute name="maven.pomderived" value="true"/> 
     </attributes> 
    </classpathentry> 
    <classpathentry kind="lib" path="src/main/resources/db2jcc_license.jar"/> 
    <classpathentry kind="lib" path="src/main/resources/db2jcc4.jar"/> 
    <classpathentry kind="lib" path="src/main/resources/ojdbc6.jar"/> 
    <classpathentry kind="src" output="target/test-classes" path="src/test/java"> 
     <attributes> 
      <attribute name="optional" value="true"/> 
      <attribute name="maven.pomderived" value="true"/> 
     </attributes> 
    </classpathentry> 
    <classpathentry kind="output" path="target/classes"/> 
</classpath> 

注:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" output="target/classes" path="src/main/java"> 
     <attributes> 
      <attribute name="optional" value="true"/> 
      <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"/> 
     </attributes> 
    </classpathentry> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> 
     <attributes> 
      <attribute name="maven.pomderived" value="true"/> 
     </attributes> 
    </classpathentry> 
    <classpathentry kind="src" output="target/classes" path="src/main/resources"> 
     <attributes> 
      <attribute name="maven.pomderived" value="true"/> 
     </attributes> 
    </classpathentry> 
    <classpathentry kind="lib" path="src/main/resources/db2jcc_license.jar"/> 
    <classpathentry kind="lib" path="src/main/resources/db2jcc4.jar"/> 
    <classpathentry kind="lib" path="src/main/resources/ojdbc6.jar"/> 
    <classpathentry kind="output" path="target/classes"/> 
</classpath> 

执行Maven->更新项目后

<?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.this.ebusiness</groupId> 
    <artifactId>test-automation-framework</artifactId> 
    <version>LOCALBUILD</version> 
    <packaging>jar</packaging> 

    <name>Test Automation Framework</name> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
       <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-source-plugin</artifactId> 
       <executions> 
        <execution> 
        <id>attach-sources</id> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>exec-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

<dependencies> 
    <dependency> 
     <groupId>org.testng</groupId> 
     <artifactId>testng</artifactId> 
     <version>6.11</version> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-java</artifactId> 
     <version>3.4.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>4.5.3</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>21.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-firefox-driver</artifactId> 
     <version>3.4.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-safari-driver</artifactId> 
     <version>3.4.0</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>2.5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>2.8.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.8.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.ini4j</groupId> 
     <artifactId>ini4j</artifactId> 
     <version>0.5.4</version> 
    </dependency> 
</dependencies> 

回答

0

在Eclipse中,“Maven-Update Project ...”命令指示Eclipse根据pom.xml更新其自己的项目文件(.classpath以及其他文件)。这不是一个真正的Maven命令。基于Java/Maven项目的典型布局,Eclipse中添加了您所看到的修改。我相信这是由maven2Naturemaven2Builder存在.project控制的。

你还没有真正说过这个问题,所以我不知道你为什么要改变它。但你会发现这些问题的答案有所帮助:

What exactly does Maven Update Project do in Eclipse?

What does Maven Update Project do in Eclipse?

+0

一个大问题是它加入**到/ src目录/主/资源,然后不包括这些文件的排除列表在生成的jar文件中,它不起作用。另一个问题是它不能成功构建,因为它期望存在一个/ src/main/test目录,这在我的项目中不存在。因此,jar不会被创建,依赖于这个框架的其他项目将不会生成或运行。 – GregMa

+0

您正在将'.classpath'(这只对Eclipse很重要)与Maven POM混淆。排除'**'仅影响Eclipse内部构建器的类路径。它不排除在使用例如JAR文件构建时包含在JAR中的资源。 'maven install'。 – TheCoolah

+0

至于缺少'/ src/main/test'搞砸你的构建,只需添加一个空目录,Eclipse就会很开心。这只是Eclipse期望的目录结构。我不知道这个解决方法。 – TheCoolah

0

我们这里有两个问题:

1)如果你正在使用maven,那么你不应该修改的.classpath或设置你的项目文件,因为这将通过日食与m2e插件。

这就是当您使用“maven =>更新项目”时,您的项目文件将从maven模板更新的原因。

2)使用maven是个好主意。 Maven介绍了一些项目的模板。因此,如果你使用maven,你将不得不接受一些maven特定的约定。

这个约定在maven项目页面描述。

你可以重写这个约定,重写maven超级pom。

在这里看到: http://maven.apache.org/pom.html#The_Super_POM

<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory> 

<testResources> 
     <testResource> 
     <directory>${project.basedir}/src/test/resources</directory> 
     </testResource> 
    </testResources> 
+0

问题是,我没有直接编辑.classpath或设置文件,而是通过Eclipse右键单击项目,选择“属性”并在“源”选项卡中执行更改。然后我检查生成的.settings以查看它的外观。 – GregMa

+0

如果您运行“Maven - 更新项目...”,请确保取消选中“从pom.xml更新项目配置”选项。这就是改写.classpath(通过Project - Properties - Java Build Path创建的)。 – TheCoolah

相关问题