Maven resource files, put java class files and pro

2020-03-21 10:36发布

I have java class files and property files in the same directory.

src/main/java/com/berlin/Test.class

src/main/java/com/berlin/Test.properties

With the maven jar I build and the maven target, I want these to appear in the same directory. but maven is placing the class files and property files in different places when I do 'mvn package'.

.. Output: jar -tvf file.jar:

Sat Jun 11 08:24:32 EDT 2011 main/java/com/berlin/Test.properties

I want: Sat Jun 11 08:24:32 EDT 2011 com/berlin/Test.properties Sat Jun 11 08:24:32 EDT 2011 com/berlin/Test.class

...

Part of my pom:

<build>
        <finalName>${project.artifactId}</finalName>
        <sourceDirectory>src</sourceDirectory>
        <testSourceDirectory>test</testSourceDirectory>
        <resources>
            <resource>
                <directory>src</directory>
                <includes>
                    <include>**</include>
                </includes>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
<plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.source.version}</source>
                    <target>${java.target.version}</target>
                </configuration>
            </plugin>           
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>            
        </plugins>

3条回答
Summer. ? 凉城
2楼-- · 2020-03-21 10:59

First you should place your resources into src/main/resources/com/berlin/Test.properties and your java source files into src/main/java/com/berlin/Test.java...Never put compiled classes into src/ folder... furthermore you should remove the configuration:

  <finalName>${project.artifactId}</finalName>
  <sourceDirectory>src</sourceDirectory>
  <testSourceDirectory>test</testSourceDirectory>
  <resources>
        <resource>
            <directory>src</directory>
            <includes>
                <include>**</include>
            </includes>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
    </resources>

from your pom, cause you don't need it and furthermore it's wrong (Convention over configuration paradigm!). Take a look at the default folder layout in maven.

The Maven Way is to put the source files (*.java) into src/main/java, the resources src/main/resources. The unit test classes src/test/java and src/test/resources after compiling it will be put into target/classes or for the tests target/test-classes.

查看更多
够拽才男人
3楼-- · 2020-03-21 11:02
<build>
    <testResources>
        <testResource>
            <directory>src/test/resources</directory>
        </testResource>
        <testResource>
            <directory>src/test/java</directory>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </testResource>
    </testResources>
</build>
查看更多
再贱就再见
4楼-- · 2020-03-21 11:05

For the Maven reasons, you should place properties file into src/main/resources, not in src/main/java directory (keeping the same subfolder structure).

That being said, to get what you want you need to replace (in your pom.xml) src with src/main/java. Not tested, but if you have problems please share.

查看更多
登录 后发表回答