有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java mvn包不包含xml

我正在使用mybatis 3.3.1版本,并将mybatis配置文件mybatis-conf.xml放在位于SqlSessionFactoryManager的目录中

我通过mvn package创建了可执行jar,但是SqlSessionFactoryManager告诉了一个错误

java.io.IOException: Could not find resource kr/stocktalk/mybatis/mybatis-conf.xml
at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:114)

这是SqlSessionFactoryManager的代码片段

try {

    String resource = "kr/stocktalk/mybatis/mybatis-conf.xml";
    Reader reader = Resources.getResourceAsReader(resource);

    if (sqlSessionFactory == null) {
        sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(reader);
    }
} catch (Exception e) {
        e.printStackTrace();
}

我认为例外情况是mybatis-conf.xml不包括在可执行jar中

所以我试着在里面添加includecodemaven-jar-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
    <excludes>
        <exclude>logback.xml</exclude>
        </excludes>
    <includes>
        <include>**/*.xml</include>
        <include>**/*.class</include>
    </includes>
    <archive>
        <manifest>
            <mainClass>kr.stocktalk.chat.ChatServer</mainClass>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
</plugin>

但可执行jar文件中不包含xml文件

如何包含*。xml文件

这是所有的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">
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
    <modelVersion>4.0.0</modelVersion>
    <groupId>kr.stocktalk</groupId>
    <artifactId>stocktalk-chat</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>kr.stocktalk.chat.ChatServer</mainClass>
                    <!-- <arguments> <argument>foo</argument> <argument>bar</argument> </arguments> -->
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <!-- <compilerArgument>-Xlint:all</compilerArgument> -->
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- eclipse 에서는 target 밑의 lib 에 생성 됨 -->
                    <outputDirectory>target/lib</outputDirectory>
                    <overWriteIfNewer>true</overWriteIfNewer>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>logback.xml</exclude>
                    </excludes>
                    <includes>
                        <include>**/*.xml</include>
                        <include>**/*.class</include>
                    </includes>
                    <archive>
                        <manifest>
                            <mainClass>kr.stocktalk.chat.ChatServer</mainClass>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <targetPath>${basedir}/target/resources</targetPath>
            </resource>
            <!-- <resource>
                <directory>src/main/java</directory>
                <targetPath>${basedir}/target</targetPath>
                <excludes>
                    <exclude>*.java</exclude>
                </excludes>
            </resource> -->
        </resources>

    </build>
    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-core</artifactId>
            <version>1.10.68</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-datapipeline</artifactId>
            <version>1.10.68</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-dynamodb</artifactId>
            <version>1.10.68</version>
        </dependency>
        <dependency>
            <groupId>com.ganyo</groupId>
            <artifactId>gcm-server</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.0.36.Final</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.8</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.6.2</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.jtds</groupId>
            <artifactId>jtds</artifactId>
            <version>1.3.1</version>
        </dependency>
    </dependencies>
</project>

共 (1) 个答案

  1. # 1 楼答案

    可以使用绝对或相对路径访问资源。您的路径"kr/stocktalk/mybatis/mybatis-conf.xml"是一个相对路径(相对于它所使用的类),但看起来更像是要指定一个绝对资源路径

    因此,如果您的SqlSessionFactoryManager在包kr.stocktalk.mybatis中,它将尝试加载资源kr.stocktalk.mybatis.kr.stocktalk.mybatis.mybatis-conf.xml

    应通过在开头添加斜杠使资源路径成为绝对路径:

    "/kr/stocktalk/mybatis/mybatis-conf.xml"