Maven 自定义目录结构 - 尽管指定了 sourceDirectory,但没有要编译的源
Maven custom directory structure - no sources to compile despite specifying sourceDirectory
我正在使用自定义目录结构并在 sourcedirectory
标记中指定了目录。但我仍然收到消息 No sources to compile
。虽然构建成功。
我的目录结构:
所以我使用的是 java
而不是 src/main/java
。 (而且我有这样做的理由,所以现在无法切换到 src/main/java
)
这是我的 pom.xml:
<artifactId>application</artifactId>
<name>application</name>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.test.skip>true</maven.test.skip>
</properties>
<build>
<sourceDirectory>java</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<excludes>
<exclude>**/old/**/*.java</exclude>
</excludes>
<includes>
<include>java/com/**/*.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<excludes>
<exclude>**/old/**/*.java</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.start.Start</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
当我 运行 命令 mvn clean package
时,我得到以下输出:
源代码未编译,生成的 jar 为空。我在 Maven 中使用自定义目录结构时提到的所有来源都说使用 sourceDirectory
应该可以解决问题。但就我而言,它并没有解决
编辑
我正在使用自定义目录结构,因为使用标准目录结构对我不起作用。她的我的问题是:
编辑2:
我正在 linking java 目录中的源代码。也就是说,在文件系统上,application->java 不存在,但在 eclipse 中通过 link 源选项,我从不同的目录添加了 Java 源文件夹。因此它出现在eclipse中。我也有 运行 maven 命令与 mvn 命令行以及通过 eclipse。
这是你的问题:<include>java/com/**/*.java</include>
您不应包括源目录,而应包括相对于它的路径。
按照此工作示例的这些步骤进行操作,并将其与您的项目逐步进行比较以找出问题所在:
- 创建文件夹。
- 在文件夹中创建一个 pom.xml,内容如下:
<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.yourdomain.yourproject</groupId>
<artifactId>yourapp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>yourapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.javadoc.skip>true</maven.javadoc.skip>
</properties>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.9</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.yourdomain.yourproject.content.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<dependencies>
<dependency>
<groupId>org.jvnet.wagon-svn</groupId>
<artifactId>wagon-svn</artifactId>
<version>1.12</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
- 在您的根文件夹中创建此文件夹结构:
src/main/java/com/yourdomain/yourproject/content/
在 content
文件夹中创建一个 Main.java
,内容如下:
package com.yourdomain.yourproject.content;
public class Main
{
public static void main(String[] args)
{
System.out.println("HELLO");
}
}
- 回到你的根文件夹并执行
mvn clean install
- 将创建一个目标文件夹,其中包含 jar。
- 你可以用
java -jar target/yourapp-1.0-SNAPSHOT.jar
执行
如果我对你的问题的理解正确,你有一个应用程序文件夹,而实际的源 (java) 文件夹来自文件系统中的其他地方。
并且您通过 eclipse 将外部文件夹链接为 java 源进行编译。
通过在Eclipse中链接,maven不会自动知道源文件在哪里。 Maven 遵循标准目录结构来查找 java 和测试文件。
您可以使用此 Build Helper plugin 自定义 maven 查找源代码的方式。
讲了一个例子here
我正在使用自定义目录结构并在 sourcedirectory
标记中指定了目录。但我仍然收到消息 No sources to compile
。虽然构建成功。
我的目录结构:
所以我使用的是 java
而不是 src/main/java
。 (而且我有这样做的理由,所以现在无法切换到 src/main/java
)
这是我的 pom.xml:
<artifactId>application</artifactId>
<name>application</name>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.test.skip>true</maven.test.skip>
</properties>
<build>
<sourceDirectory>java</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<excludes>
<exclude>**/old/**/*.java</exclude>
</excludes>
<includes>
<include>java/com/**/*.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<excludes>
<exclude>**/old/**/*.java</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.start.Start</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
当我 运行 命令 mvn clean package
时,我得到以下输出:
源代码未编译,生成的 jar 为空。我在 Maven 中使用自定义目录结构时提到的所有来源都说使用 sourceDirectory
应该可以解决问题。但就我而言,它并没有解决
编辑
我正在使用自定义目录结构,因为使用标准目录结构对我不起作用。她的我的问题是:
编辑2:
我正在 linking java 目录中的源代码。也就是说,在文件系统上,application->java 不存在,但在 eclipse 中通过 link 源选项,我从不同的目录添加了 Java 源文件夹。因此它出现在eclipse中。我也有 运行 maven 命令与 mvn 命令行以及通过 eclipse。
这是你的问题:<include>java/com/**/*.java</include>
您不应包括源目录,而应包括相对于它的路径。
按照此工作示例的这些步骤进行操作,并将其与您的项目逐步进行比较以找出问题所在:
- 创建文件夹。
- 在文件夹中创建一个 pom.xml,内容如下:
<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.yourdomain.yourproject</groupId>
<artifactId>yourapp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>yourapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.javadoc.skip>true</maven.javadoc.skip>
</properties>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.9</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.yourdomain.yourproject.content.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<dependencies>
<dependency>
<groupId>org.jvnet.wagon-svn</groupId>
<artifactId>wagon-svn</artifactId>
<version>1.12</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
- 在您的根文件夹中创建此文件夹结构:
src/main/java/com/yourdomain/yourproject/content/
在 content
文件夹中创建一个 Main.java
,内容如下:
package com.yourdomain.yourproject.content;
public class Main
{
public static void main(String[] args)
{
System.out.println("HELLO");
}
}
- 回到你的根文件夹并执行
mvn clean install
- 将创建一个目标文件夹,其中包含 jar。
- 你可以用
java -jar target/yourapp-1.0-SNAPSHOT.jar
执行
如果我对你的问题的理解正确,你有一个应用程序文件夹,而实际的源 (java) 文件夹来自文件系统中的其他地方。 并且您通过 eclipse 将外部文件夹链接为 java 源进行编译。
通过在Eclipse中链接,maven不会自动知道源文件在哪里。 Maven 遵循标准目录结构来查找 java 和测试文件。 您可以使用此 Build Helper plugin 自定义 maven 查找源代码的方式。
讲了一个例子here