當前位置:首頁 » 網頁前端 » mavenwebdebug
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

mavenwebdebug

發布時間: 2022-11-17 22:57:04

『壹』 maven 中的jetty是怎麼啟動

1.法1: 在pom中配置
<build>
<finalName>testdemo</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<!-- 在很短的時間間隔內在掃描web應用檢查是否有改變,如果發覺有任何改變則自動熱部署。默認為0,表示禁用熱部署檢查。任何一個大於0的數字都將表示啟用。 -->
<scanIntervalSeconds>10</scanIntervalSeconds>
<webAppConfig>
<!--jetty插件啟動後的訪問路徑: http://localhost:8080/testdemo-->
<contextPath>/testdemo</contextPath>
<tempDirectory>${project.build.directory}/work</tempDirectory>
</webAppConfig>
</configuration>
</plugin>
</plugins>
</build>

在命令行中輸入如下命令:
a.切換的項目坐在文件夾
d:
cd workspace/testdemo
b.清理、打包
mvn clean

mvn clean install -Dmaven.test.skip=true
c.在jetty中運行(這個定位到src/main/webapp目錄,只執行mvn clean則target下不會生成war包)
mvn jetty:run
d.訪問http://localhost:8080/testdemo
e.停止jetty
ctrl+c
y

=====================================================
2.法2: 在pom中配置
<build>
<finalName>testdemo</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<contextPath>/testdemo</contextPath>
<webApp>${basedir}/target/testdemo.war</webApp>
</configuration>
</plugin>
</plugins>
</build>

在命令行中輸入如下命令:
a.切換的項目坐在文件夾
d:
cd workspace/testdemo
b.打包
mvn clean
c.在jetty中運行
mvn jetty:run-war -Dmaven.test.skip=true
d.訪問http://localhost:8080/testdemo
e.停止jetty
ctrl+c
y

=====================================================
3.法3: 在pom中配置
<build>
<finalName>testdemo</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<contextPath>/testdemo</contextPath>
<war>${basedir}/target/testdemo.war</war>
</configuration>
</plugin>
</plugins>
</build>

在命令行中輸入如下命令:
a.切換的項目坐在文件夾
d:
cd workspace/testdemo
b.打包
mvn clean
c.在jetty中運行
mvn jetty:run-war -Dmaven.test.skip=true
d.訪問http://localhost:8080/testdemo
e.停止jetty
ctrl+c
y

eclipse如何進斷點調試(前提是eclipse安裝了maven插件,工程由maven創建,且工程pom.xml中配置了如上所說的jetty插件):

1. 工程右鍵-->調試方式-->調試配置-->maven build

2. Maven Build-->新建-->右側:main-->Base Directory-->Browse Workspace-->點選要調試的工程-->Goals:clean jetty:run-->Skip Tests-->應用-->調試(啟動過程中會自倉庫下載依賴的插件,注意倉庫<repositories>配置)

3. 訪問url操作

4. 進斷點後,如果報找不到源,則點擊"編輯源查找路徑"-->"添加"-->java 項目-->確定-->勾選要調試項目-->確定-->確定-->進入斷點

『貳』 maven+tomcat調試下,如何做到不用每次都打包,而是直接啟動服務就ok

<build>
<outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
<testOutputDirectory>src/main/webapp/WEB-INF/classes</testOutputDirectory>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>-lib-src-webapps</id>
<phase>package</phase>
<configuration>
<tasks>
<delete dir="src/main/webapp/WEB-INF/lib" />
< todir="src/main/webapp/WEB-INF/lib">
<fileset dir="target/sem-tools-0.1/WEB-INF/lib">
<include name="*" />
</fileset>
</>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
webRoot設置為src/main/webapp
這樣只需要在依賴有變化時package一次

『叄』 有用過maven 的嗎,感覺在maven管理下 調試有點麻煩 每次改一點東西都要重新 install一下。

試試塊maven中集成jetty把.jetty支持熱部署的

『肆』 maven使用windows xp dos命令創建java web項目出錯。 已經安裝apache-maven-3.0.5並配置好環境。

mvn 後面加個 -X 不行就加個 -e 就可以看到詳細的報錯了。
貌似你配置的插件沒有能夠成功下載,也無法鏈接到世界伺服器上去。

『伍』 如何用maven的eclipse插件打包

現在一般都使用Maven來管理工程,包括依賴的jar包,依賴的jar包,只需要在pom.xml的元素中添加項,每一個項都是一個依賴的jar包。
當開發完之後,需要打包成可執行的jar包,那麼在eclipse中如何使用Maven打包呢,並且包含POM.xml中依賴的jar包?兩個步驟:

  • 在項目的POM.xml文件中添加maven-assembly-plugin插件,如下:

  • <build>

  • <plugins>

  • <plugin>

  • <artifactId>maven-assembly-plugin</artifactId>

  • <configuration>

  • <archive>

  • <manifest>

  • <mainClass>com.hey.main.Main</mainClass>

  • </manifest>

  • </archive>

  • <descriptorRefs>

  • <descriptorRef>jar-with-dependencies</descriptorRef>

  • </descriptorRefs>

  • </configuration>


  • </plugin>

  • </plugins> </build>123456789101112131415161718

  • 其中mainClass是你項目的入口main函數所在的類。

  • 然後[右鍵]項目,選擇[Run As]或[Debug As]的[Maven build …]後,在彈出的[Edit Configuration]的[Goals]填寫assembly:assembly後,點擊[Run],這樣便會在項目下的[target]文件夾中生成兩個jar文件,一個xxx.jar與xxx-jar-with-dependencies.jar, xxx便是你在創造Maven項目時的artifactId與version的拼接,即POM.xml文件中的與元素。這樣xxx.jar便是不包含依賴的jar,xxx-jar-with-dependencies.jar便是包含依賴的jar包。

  • 如果在終端或者shell文件中使用java命令運行,便需要運行xxx-jar-with-dependencies.jar,不然會報依賴的包不存在的錯誤。使用java -jar xxx-jar-with-dependencies.jar arg1, arg2 … 1>info.log 2 > err.log 運行jar包,1>info.jar表示將運行時jar包中的終端輸出到info.log文件中,2>err.log表示將運行時的錯誤信息輸出到err.log文件中。

  • 可以參見:http://blog.csdn.net/symgdwyh/article/details/6081532

    Eclipse插件Maven打包成war

    在使用Maven創建java web項目時候,需要將項目打包成war包。直接[右鍵]項目,選擇[Run As]或[Debug As]的[Maven install],這樣便會在項目下的[target]文件夾中生成xxx.war文件,xxx是項目的名稱。
    如果該web需要在tomcat下運行,那麼直接將war包拷貝到tomcat下的webapps文件夾中,這樣tomcat啟動時會自動解壓到webapps下面,解壓的文件夾名便是war的名字(不包含後綴),如果更改war文件後,重啟tomcat需要先刪除解壓的文件夾,然後再重啟tomcat,不然會是前面的代碼。

    如何將依賴的jar包拷貝到項目下

  • 一、導出到默認目錄 target/dependency12

  • 從Maven項目中導出項目依賴的jar包:進入工程pom.xml 所在的目錄下,執行如下命令:
    1、mvn dependency:-dependencies或在eclipse中,選擇項目的pom.xml文件,點擊右鍵菜單中的Run As,見下圖紅框中,在彈出的Configuration窗口中,輸入 dependency:-dependencies後,點擊運行;
    2、maven項目所依賴的jar包會導出到targed/dependency目錄中。
    二、導出到自定義目錄中
    在maven項目下創建lib文件夾,輸入以下命令:
    1、mvn dependency:-dependencies -DoutputDirectory=lib;
    2、maven項目所依賴的jar包都會復制到項目目錄下的lib目錄下。
    三、設置依賴級別
    同時可以設置依賴級別,通常使用compile級別
    mvn dependency:-dependencies -DoutputDirectory=lib -DincludeScope=compile

『陸』 ServletContainerInitializer載入機制

最近優化項目架構針對Logback日誌框架需要結合Spring的profiles配置文件達到不同運行環境自動配置參數.

最開始想法是使用ServletContextListener監聽器實現在項目初始化時讀取Spring的profiles配置文件手動放入當前環境變數中但在測試過程中發現問題!

環境變數還沒有開始載入, Logback框架已經開始被載入!

跟蹤日誌信息發現一個類, Logback是通過該類進行Web環境初始化的!該類實現了javax.servlet.ServletContainerInitializer介面

第一次接觸ServletContainerInitializer查找了一下相關規范, 於是自己也寫了一個ServletContainerInitializer介面的類LogInitializer在但發現放置WebContent/META-INF/services/javax.servlet.ServletContainerInitializer文件無法被讀取, 網上說只有放置在WebContent/WEB-INF/lib下的Jar包中才能被讀取!

單獨建立一個新的項目通過Maven引入到原有項目中, 忽然發現和LogInitializer存在先後載入順序問題, 經過幾次測試發現跟Jar包名稱的先後順序有關, 於是開始跟蹤Tomcat運行時的Debug調試看看Tomcat是怎麼載入ServletContainerInitializer實例的!

開發工具: IDEA 2017.2.6版

Servlet容器: Tomcat 8.5.20

在LogInitializer#onStartup()方法第一行打斷點等待

進入斷點後觀察調用堆棧, 發現是org.apache.catalina.core.StandardContext#startInternal() 調用了LogInitializer#onStartup()

進入org.apache.catalina.core.StandardContext#startInternal()方法, 發現一個成員變數迭代調用

跟蹤成員屬性 initializers 發現是一個鏈表哈希映射

繼續根據 initializers 被調用情況, 發現org.apache.catalina.core.StandardContext#()向成員屬性中放入實例

查找org.apache.catalina.core.StandardContext#()方法被調用情況, 發現在org.apache.catalina.startup.ContextConfig#webConfig()方法中一個成員屬性迭代調用

跟蹤 initializerClassMap 成員屬性發現類似於剛才的initializers

跟蹤 initializerClassMap 被放入對象, 發現org.apache.catalina.startup.ContextConfig#()方法

進入org.apache.catalina.startup.WebappServiceLoader#load()方法觀察ServletContainerInitializer實例被載入情況

觀察了一下 javax.servlet.ServletContext.ORDERED_LIBS 靜態常量發現與web.xml中的<absolute-ordering>元素相關, 因為沒有配置所以先不考慮, 這樣判斷 orderedLibs!=null 不會被執行類載入器loader的引用就是當前項目Servlet容器的類載入器去載入資源

查找到五個資源, Tomcat容器自身2個, LogInitializer, , (Spring的)  這個時候已經明了ServletContainerInitializer一般情況下是基於類載入器載入資源的枚舉迭代順序, 因為委託載入機制會從最頂級類載入向下一直載入到當前項目Web容器類載入器下的資源, 到此基本已經弄清楚ServletContainerInitializer載入流程!

因為看見了 ORDERED_LIBS 常量所以想繼續研究一下<absolute-ordering>元素, 大概看了一下相關規範文檔定義, 該元素是Servlet3.0出現的為第三方插件Jar包自動配置一些Servlet, Filter時所有第三方插件按照指定絕對順序載入Jar包資源

1. 在Jar包的META-INF目錄下建立web-fragment.xml

2, 配置web.xml

在org.apache.catalina.startup.WebappServiceLoader#load()方法打斷點, 發現找到一個jar包

將當前項目 Web容器類載入器 替換為 Tomca容器類載入器 是因為委託載入機制從最頂級類載入器載入到當前類載入器所以會導致當前項目Web容器不會被載入到, 就會跳過當前項目下WEB-INF/lib中的Jar包查找所以只有log-initializer-0.1.jar中的ServletContainerInitializer被載入,  , 的配置丟失

不符合預期結果, 繼續看<absolute-ordering>文檔, 發現一個<others />元素, 在<absolute-ordering>中追加

重新開始在org.apache.catalina.startup.WebappServiceLoader#load()方法斷點Debug

這次就有所有Jar包了, 但很好奇去項目部署的Tomcat下WEB-INF/lib 看了一下Jar包數量 44個  而非37個逐一匹配發現缺少這些Jar包

非常好奇為什麼會丟失Jar包, 如果只是丟失apache相關的也可能Tomcat排除自身lib下相關的, 但是slf4j, aspecj居然也沒有, 本著求知的好奇心繼續調試, 找出缺少Jar包的原因

因為是通過 ORDERED_LIBS 常量獲取的容器屬性值, 所以直接在org.apache.catalina.core.ApplicationContext#setAttribute()使用條件斷點

查看堆棧信息, 發現被org.apache.tomcat.util.descriptor.web.WebXml#orderWebFragments()方法調用

跟蹤局部變數 orderedFragments

發現是局部變數 fragments 映射迭代放入, 而 fragments 是由外部傳遞

繼續向上跟蹤堆棧

找到org.apache.tomcat. JarScanner 實現類org.apache.tomcat.util.scan. StandardJarScanner #scan()方法

找到org.apache.tomcat. JarScanFilter 實現類org.apache.tomcat.util.scan. StandardJarScanFilter #check()方法

至此基本上算是了解ServletContainerInitializer載入機制!

『柒』 怎麼編譯運行從github上下載下來的maven項目源碼(我想調試運行的是sonarqube的源碼)跪求大神orz

maven 編譯命令
從別處拷貝來的maven項目,有時候會出現不能debug關聯的情況,即按住ctrl鍵後不能跳轉到相應的類或方法,這是需要eclipse環境生成 Eclipse 項目文件的。

可以在cmd命令窗口下進入到maven項目包含pom.xml文件的目錄下,運行 mvn eclipse:eclipse 命令即可,如果還不行,可使用mvn compile :編譯源代碼 命令。

--------------------------------------------------------------------------------------------------------------------------------
下面是一些maven的常用命令:

Maven2 的運行命令為 : mvn ,
常用命令為 :
mvn archetype:create :創建 Maven 項目
mvn compile :編譯源代碼
mvn test-compile :編譯測試代碼
mvn test : 運行應用程序中的單元測試
mvn site : 生成項目相關信息的網站
mvn clean :清除目標目錄中的生成結果
mvn package : 依據項目生成 jar 文件
mvn install :在本地 Repository 中安裝 jar
mvn eclipse:eclipse :生成 Eclipse 項目文件
生成項目
建一個 JAVA 項目 : mvn archetype:create -DgroupId=com.demo -DartifactId=App
建一個 web 項目 : mvn archetype:create -DgroupId=com.demo -DartifactId=web-app -DarchetypeArtifactId=maven-archetype-webapp

生成 Eclipse 項目
普通 Eclipse 項目執行 : mvn eclipse:eclipse
Eclipse WTP 項目執行 : mvn eclipse:eclipse –Dwtpversion=1.0

更詳細的,自己網路搜索 maven 編譯,學習一下吧

『捌』 我用idea斷點調試javaweb項目,斷點是一次性的嗎idea版本是2016的

我也遇到了這樣的問題只能重新設置斷點啦

『玖』 liberoffce生成excel

Windows下使用LibreOffice將office文檔(word,ppt,excel)轉成PDF(Java)

第一步:安裝Windows版LibreOffice

1.1去官網LibreOffice

https://zh-cn.libreoffice.org/

1.2下載

1.2.1第一步:進入官網點擊下載

第二步:使用java代碼操作LibreOffice進行(doc,ppt,xls)文件轉換成PDF文件

1.1:打開IDEA或者eclipse創建一個SpringBoot項目

pom.xml

<?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>org.example</groupId>
<artifactId>filepreview</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
<dependencies>
<!--Springmvc啟動器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.liumapp.workable.converter</groupId>
<artifactId>workable-converter</artifactId>
<version>v1.4.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build></project>0

1.2創建一個類ConvertOfficePDFUtils.java這個文件名稱自己取

/**
* @description libreoffice工具類
* @author holle
* @create 2020/12/24
* @since 1.0.0
*/package com.file.preview.utils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Service;import java.io.IOException;import java.io.InputStream;@Servicepublic class ConvertOfficePDFUtils {

private static Logger logger=LoggerFactory.getLogger(ConvertOfficePDFUtils.class);

/**
* 利用libreOffice將office文檔轉換成pdf
* @param inputFile 目標文件地址
* @param pdfFile 輸出文件夾
* @return
*/
public static boolean convertOfficePDF(String inputFile,String pdfFile){
long start=System.currentTimeMillis();
String command;
boolean flag;
String osName=System.getProperty("os.name");
if (osName.contains("Windows")){
command="cmd /c start soffice --headless --invisible --convert-to pdf:writer_pdf_Export " + inputFile + " --outdir " + pdfFile;
}else {
command="libreoffice --headless --invisible --convert-to pdf:writer_pdf_Export " + inputFile + " --outdir " + pdfFile;
}
flag =executeLibreOfficeCommand(command);
long end =System.currentTimeMillis();
logger.debug("用時:{} ms", end - start);
return flag;
}

/**
* 執行command指令
* @param command
* @return
*/
public static boolean executeLibreOfficeCommand(String command) {
logger.info("開始進行轉化.......");
Process process;// Process可以控制該子進程的執行或獲取該子進程的信息
try {
logger.debug("convertOffice2PDF cmd : {}", command);
process = Runtime.getRuntime().exec(command);// exec()方法指示Java虛擬機創建一個子進程執行指定的可執行程序,並返回與該子進程對應的Process對象實例。
// 下面兩個可以獲取輸入輸出流
InputStream errorStream = process.getErrorStream();
InputStream inputStream = process.getInputStream();
} catch (IOException e) {
logger.error(" convertOffice2PDF {} error", command, e);
return false;
}
int exitStatus = 0;
try {
exitStatus = process.waitFor();// 等待子進程完成再往下執行,返回值是子線程執行完畢的返回值,返回0表示正常結束
// 第二種接受返回值的方法
int i = process.exitValue(); // 接收執行完畢的返回值
logger.debug("i----" + i);
} catch (InterruptedException e) {
logger.error("InterruptedException convertOffice2PDF {}", command, e);
return false;
}
if (exitStatus != 0) {
logger.error("convertOffice2PDF cmd exitStatus {}", exitStatus);
} else {
logger.debug("convertOffice2PDF cmd exitStatus {}", exitStatus);
}
process.destroy(); // 銷毀子進程
logger.info("轉化結束.......");
return true;
}}576777879

1.3創建一個測試類

/**
* @description 測試類
* @author holle
* @create 2020/12/24
* @since 1.0.0
*/package com.test;import com.file.preview.FilePreviewApplication;import com.file.preview.utils.ConvertOfficePDFUtils;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import javax.annotation.Resource;import java.io.IOException;@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = FilePreviewApplication.class)public class TestOffice {
@Resource
private ConvertOfficePDFUtils convertOfficePDFUtils;
@Test
public void JunintTestPDF(){
long start =System.currentTimeMillis();
String srcPath ="C:/Users/holler/Desktop/*/*.docx",desPath="C:/Users/holler/Desktop/*";
String command="";
String osName=System.getProperty("os.name");
if (osName.contains("Windows")){
//輸入cmd命令;添加:srcPath表示文件所在路徑;desPath:文件輸出的路徑
command="soffice --headless --convert-to pdf " + srcPath + " --outdir " + desPath;
convertOfficePDFUtils.executeLibreOfficeCommand(command);
}
long end=System.currentTimeMillis();
System.out.println("用時:{} ms"+(end-start));
}
}

Path + " --outdir " + desPath;
convertOfficePDFUtils.executeLibreOfficeCommand(command);
}
long end=System.currentTimeMillis();
System.out.println(「用時:{} ms」+(end-start));
}
}

『拾』 Maven多Web模塊怎麼調試

tomcat好像只有部署的形式,不能以容器直接啟動?反正搞了半天 斷點就是打不上

給你jetty的配置

<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
<!-- 熱部署 -->
<scanIntervalSeconds>0</scanIntervalSeconds>
<httpConnector>
<port>9090</port>
</httpConnector>
<!-- <webAppConfig> <contextPath>/${project.artifactId}</contextPath>
</webAppConfig> -->
</configuration>
</plugin>
關於版本 ${jetty.version}

你可以去:http://search.maven.org/#search%7Cga%7C1%7Corg.eclipse.jetty

找一個 我用的是最新的 9.2.0.M0

關於jetty配置可以看:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html

然後build里寫 jetty:run 就行了
http://www.oschina.net/question/106591_151036?sort=time